您的位置:首页 > 编程语言 > ASP

黑马程序员_学习日记21_ASP.Net中级

2012-05-15 21:25 316 查看
1、虚拟路径:

l 特殊路径标识“~”

HyperLink控件可以识别“~”

推荐资源定位都使用~从应用根目录开始定义。

l 编程处理“~”

如果在服务器端控件中(使用runat=server的控件)会自动将“~”进行转换,如果在HTML控件或者需要在代码中转换的话可以使用VirtualPathUtility.ToAbsolute(“~/a/b1.aspx”)就是将虚拟路径转换为相对于应用根的全路径,也就是/WebSite4/a/b1.aspx

2、Request对象:是Page类的一个属性

Request.AppRelativeCurrentExecutionFilePath
获得当前执行请求相对于应用根目录的虚拟路径,以~开头,比如“~/Hander.ashx”

Request.PhysicalApplicationPath获得当前应用的物理路径

3、Response对象

l 响应的缓冲输出:为了提高服务器的性能,ASP.Net向浏览器Write的时候并不会每Write一次就会立即输出到浏览器,而是会缓存数据,到合适的时机或响应结束才会将缓存区的数据一起发送到浏览器

l Response对象的主要成员:

Response.Buffer、Response.BufferOutput:经过Reflector反编译,发现两个属性是一样的,用来控制是否采用响应缓存,默认是true。

Response.Flush()将缓冲区的数据发送给浏览器。这在需要将Write出来的内容立即输出到浏览器的场合非常适用。例:

for (int i = 0; i< 20; i++)
{
System.Threading.Thread.Sleep(500);//将?当Ì¡À前¡ã线?程¨¬挂¨°起e指?定¡§的Ì?时º¡À间?
context.Response.Write("第̨²" + i +
"步?完ª¨º成¨¦!ê?<br/>");
//每?执¡ä行D一°?步?将?缓o存ä?中D的Ì?数ºy据Y立¢¡é即¡ä输º?出?;ê?否¤?则¨°每?一°?步?执¡ä行D的Ì?数ºy据Y都?放¤?在¨²缓o存ä?中D,ê?一°?次ä?性?输º?出?
context.Response.Flush();
}
Response.Clear()清空缓存区中的数据,这样在缓存区的没有发送到浏览器端的数据被清空,不会发送到浏览器。

Response.Cookies返回给浏览器Cookie信息

Response.OutputStream输出流,处理图片、下载的文件等

Response.End终止响应

Response.Redirect重定向浏览器到新的网址。这个过程经历了服务器通知浏览器“请重新访问url这个网址”和浏览器接到命令访问新网址的过程。后面会用来防止刷新浏览器时提示“重试”。

4、Server对象:是context的一个属性,是HttpServerUtility类的一个对象

l Server.HtmlDecode()、Server.HtmlEncode()、Server.UrlEncode()、Server.UrlDecode()是对HttpUtility类中相应方法的一个代理调用。个人推荐使用HttpUtility,因为有的地方很难拿到Server对象。

l Server.Transfer(path)内部重定向请求。(注意和Response.Redirect的区别)。Server.Transfer(“JieBanRen.aspx”)将用户的请求重定向给JieBanRen.aspx处理,是服务器内部的接管浏览器是意识不到这个接管的。

5、HttpHandler是对请求的响应,可以输出普通的html内容,也可以输出图片、文件。

l 设置起始页:右键“项目名称”→属性→Web→启动操作→当前页

6、WebForm

可以在aspx中写C#代码,须加<% %>

codebehind是什么?

7、Page类成员

Request、Response、Server属性,对context.Request、context.Response、context.Server的简化调用。

AppRelativeVirtualPath属性:获得页面相对于应用根路径的路径,比如:~/Default.aspx

FindControl(ctrlId),根据控件的Id找到控件。一般情况下直接在代码中写控件Id引用控件就可以了,但对于有些场合,使用ListView等控件的模版、编写自定义控件等则需要使用FindControl来引用控件,FindControl返回值是Control,一般需要显式转换为相应的控件。例:TextBox
txtBox =(TextBox)FindControl(“TextBox1”);txtBox.Text= “aaa”;

IsPostBack、Session

ResolveClientUrl(url)将虚拟路径转换为客户端访问时的路径,比如ResolveClientUrl(“~/a/b.aspx”)结果是/a/b.aspx,这通常在ListView等控件的模板中输出HTML使用。

ResolveUrl(url)将虚拟路径转换为相对于网站根目录的路径,比如:

ResolveUrl(“~/a/b.aspx”)的结果是/WebSite4/a/b.aspx。不考虑当前页面,基本就是对VirtualPathUtility.ToAbsolute简化调用,直接转换为一个全路径。

8、ASP.Net服务端基本控件

l 服务端控件在内网系统、互联网的后台部分等访问频率不高的地方用很合适。

l 所有的ASP.Net控件大部分都是从Control、WebControl类继承,这两个类公用的成员有:

(1)ClientID,控件在客户端的Id,控件在服务端的Id不一定等于客户端HTML中的Id,比如说在ListView等控件的模板中。因此如果要在客户端通过JavaScript、Dom、JQuery的getElementById、$(“#id”)来操作控件的话最好不要直接写服务端的Id,而是$(“#<%txt1.ClientID%>”)。在用户控件(UserControl)中可以看到ClientID和Id的不同

(2)Visible属性,控件是否可见。如果Visible=False是不会渲染到HTML中的(表示没有),这和在HTML中给元素style.display=’none’效果是不一样的(表示隐藏)。

(3)CssClass属性,控件的样式名,就是HTML中控件的class属性。

(4)Attributes,用来设置获取控件的额外属性。

l (1)服务端Label控件在客户端渲染成<span>,如果设置了AssociatedControlID则渲染成Label

(2)Literal控件也是展示一段文本,但Literal控件不会渲染任何的标签,就是将Text的属性的值展示出来而已。将mode属性设为encode就会自动将内容encode,避免XSS攻击。

(3)TextBox控件。TextMode属性取值SingleLine、MultiLine、Password。当AutoPostBack属性为true时,用户焦点离开TextBox就会造成页面Post,实现原理就是讲ASP.Net原理时的AutoPostBack。TextChanged事件,文本发生变化时事件触发

(4)RadioButton控件,通过GroupName属性进行分组

(5)Button、LinkButton、ImageButton控件。OnClientClick属性,当用户点击按钮的时候在浏览器端执行的代码,注意OnClientClick是字符串属性,写的代码是JavaScript代码,运行在浏览器端。都有CommandName、CommandArgument、两个属性和Command事件,可以让多个按钮共享一个Command事件处理函数,通过读取事件对象e的CommandName、CommandArgument两个属性读取被点击按钮上设置的这两个参数来执行不同的操作。例子:编辑、删除多行数据。这种用法在ListView等控件中用的最多。

(6)Panel控件,用来盛放一些控件。如果设定GroupingText属性那么就渲染为含有<fieldset>的<div>标签,也就是GroupBox效果,否则渲染为<div>

(7)FileUpload控件,文件上传控件。渲染成input(type=file)。属性:FileContent以流的形式获得上传的文件;FileName上传文件名;HasFile属性:用户是否选择了文件。SaveAs方法用于将文件保存到磁盘的指定位置。漏洞:文件上传漏洞(上传aspx),即臭名昭著的WebShell。预防漏洞的方法:只允许上传指定类型的文件,上传文件夹不给执行权限。

9、三种控件

(1)HTML控件,ASP.Net把HTML控件当成普通字符串渲染到客户端,不进行处理

(2)ASP.Net服务端控件,

(3)带有runat=”server”的服务端HTML控件。

10、验证控件

l RequiredFieldValidator:字段必填

ControlToValidate设定要验证的控件,Text属性为当被验证的控件属性为空时显示的错误信息,Text不仅可以写普通文本,还可以写任何HTML内容

l RangeValidator:值在给定的最大值、最小值之间

CompareValidator:用于比较两个值的关系是否满足要求或者是否是指定类型的数据

RegularExpressionValidator:验证数据满足正则表达式

CustomValidator:自定义验证

l 所有Validator的共性:

页面中的IsValid属性用来判断页面中的所有Validator是否都通过校验,只有都校验通过才能为True,即使页面中的Validator服务端校验报错(禁用JavaScript跳过客户端校验),在服务端方法中的业务代码(比如btn_Click)也会被执行,因此如果代码在数据校验不通过的不能执行则需要判断IsValid的值。

所有验证控件都有Display属性,用来决定如何显示错误信息。三个值:Static:没有错误信息的时候控件的visibility样式为hidden来实现隐藏;Dynamic:没有错误信息的时候控件的display样式为none来实现隐藏。这两者的区别是visibility:hidden隐藏控件任然为占据控件,display:none隐藏则不会占用控件。Display属性还可以设置为None(用来配合后面讲的ValidationSummary)

如果一个页面中同时放置注册和登录表单,那么他们的验证就会同时进行,这样虽然只是登录,但是注册的验证也会触发,可以使用验证组来解决这个问题,将同一组的控件(表单、提交按钮、Validator等)的ValidationGroup设为相同的值就可以

我的思考:

1、
(1)string fullpath =
HttpContext.Current.Server.MapPath("~/images/MouseMove.jpg");
fullpath得到的路径是g:\资料\visualstudio 2010\WebSites\WebSite1\images\MouseMove.jpg

(2)string fullpath =
HttpContext.Current.Server.MapPath(VirtualPathUtility.ToAbsolute("~/images/MouseMove.jpg"));
fullpath得到的路径是g:\资料\visualstudio 2010\WebSites\WebSite1\images\MouseMove.jpg

分析:
HttpContext.Current.Server.MapPath返¤¦Ì回?与®?
Web 服¤t务?器¡Â上¦?的Ì?指?定¡§虚¨¦拟a路¡¤径?相¨¤对?应®|的Ì?物?理¤¨ª文?件t路¡¤径?。¡ê
VirtualPathUtility.ToAbsolute将?虚¨¦拟a路¡¤径?转Áa换?为a应®|用®?程¨¬序¨°绝?对?路¡¤径?。¡ê
结论:

HttpContext.Current.Server.MapPath也能识别带“~”的虚拟路径,或其内部调用了VirtualPathUtility.ToAbsolute

2、IDbCommand和SqlCommand的区别:

IDbCommand 表示连接到数据源时执行的 SQL
语句,并且是由访问关系数据库的 .NET Framework
数据提供程序实现的。

SqlCommand
表示要对 SQL Server
数据库执行的一个 Transact-SQL
语句或存储过程。此类不能被继承。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐