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

来源:互联网 发布:华云数据是民营还是 编辑:程序博客网 时间:2024/05/08 18:42

1、虚拟路径:

l        特殊路径标识“~

HyperLink控件可以识别“~

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

l        编程处理“~

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

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

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

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

3Response对象

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

l        Response对象的主要成员:

Response.BufferResponse.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Ì?ºyY¢¡é¡äº??ê?¤?¨°?°??¡äDÌ?ºyY?¤?¨²oä?Dê?°?ä??º??

            context.Response.Flush();

        }

       Response.Clear()清空缓存区中的数据,这样在缓存区的没有发送到浏览器端的数据被清空,不会发送到浏览器。

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

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

       Response.End终止响应

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

4Server对象:是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处理,是服务器内部的接管浏览器是意识不到这个接管的。

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

 

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

6WebForm

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

codebehind是什么?

 

7Page类成员

       RequestResponseServer属性,对context.Requestcontext.Responsecontext.Server的简化调用。

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

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

       IsPostBackSession

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

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

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

 

8ASP.Net服务端基本控件

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

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

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

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

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

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

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

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

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

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

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

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

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

 

9、三种控件

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

2ASP.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来实现隐藏。这两者的区别是visibilityhidden隐藏控件任然为占据控件,displaynone隐藏则不会占用控件。Display属性还可以设置为None(用来配合后面讲的ValidationSummary

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

 

我的思考:

1

1string fullpath =HttpContext.Current.Server.MapPath("~/images/MouseMove.jpg");

fullpath得到的路径是g:\资料\visualstudio 2010\WebSites\WebSite1\images\MouseMove.jpg

2string 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

2IDbCommandSqlCommand的区别:

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

SqlCommand表示要对 SQL Server数据库执行的一个 Transact-SQL语句或存储过程。此类不能被继承。

原创粉丝点击