.Net培训个人总结笔记34
学习交流,欢迎转载。转载请注明文章来源:http://www.cnblogs.com/lgjspace/archive/2011/01/12/2214013.html
细节:
在 html 页面中:
1. “/”表示网站根目录;
2. “../”表示上一级目录;
3. “./”或者不写表示当前目录;
细节:
“~”是 ASP.NET 下定义的专门用来定义路径的特殊路径标识符,该标识符只可以用在服务器端的控件标签中,不能用在客户端的 html 控件标签中,这些普通的 html 控件标签是不认 ASP.NET 自己定义的特殊路径标识符“~”的,如果想要让普通的 html 控件标签也认这个标识符,则必须把这些 html 标签设成“runat = server”,即把这些标签改成“运行在服务端的 html 控件”。
细节:
服务器端控件 HyperLink 的 NavigateUrl 属性就类似于客户端浏览器 html 控件 <a></a> 的 href 属性,都是指定点击控件后要连接到的目的地址。
笔记:
ppt 上的内容:
1. 和“/表示网站根目录(域名)、../表示上级目录、./表示当前目录”等 Http 标准定位不一样,“~”是 ASP.Net 定义的特殊符号,是 ASP.Net 内部进行定义推荐的用法,推荐资源定位都使用“~”从应用根目录开始定义。应用根目录和网站根目录的区别在于:如果将一个应用部署到一个目录下(例如:“http://www.rupeng.com/search”),则应用的根目录是“http://www.rupeng.com/search”,网站的根目录是“http://www.rupeng.com/”(创建 WebSite 进行演示,因为不同的 WebSite 都是在同一个网站根目录下的),因此最好用“~”,“~”并不会被浏览器认,因此ASP.Net会将这个路径转换为相对于网站的根目录的全路径再输出到浏览器。
2. 如果在服务端控件中(使用 runat = server 的控件)会自动将“~”进行转换,如果在 HTML 控件或者需要在代码中转换的话可以使用 VirtualPathUtility 类中的静态方法进行虚拟路径、全路径等的转换,比如 VirtualPathUtility.ToAbsolute("~/a/b1.aspx") 就是将虚拟路径转换为相对于“应用根”的全路径,也就是“/WebSite4/a/b1.aspx”。
细节:
在带有 ASP.NET 特有的路径定义符“~”的路径叫“虚拟路径”,这路径在普通的 html 页面中是不认的,只有在 ASP.NET 的页面中才认。
细节:
虚拟路径的好处:
1. 如果一个页面文件中的控件标签要引用另一个页面文件,如果只用“../”、“./”等相对路径标识符的话,要求被引用的目标文件的路径和要引用其它目标文件的源文件的路径都必须要求是定死的,一旦任何一个文件改变了位置,该引用的相对路径都要作相应修改;
2. 而如果用 ASP.NET 定义的特殊路径标识符“~”标识路径的话,该路径就属于虚拟路径,这种虚拟路径和前面第一条提到的相对路径比较相似,但唯一不同的是,这种虚拟路径只要求被引用的目标文件的路径必须固定,而没有要求要引用其它目标文件的源文件的路径也必须要固定,源文件的路径尽管被改变了(即源文件被移到其它位置了)也不影响虚拟路径的使用,但如果目标文件的路径改变了(即目标文件被移动到其它位置了)的话,虚拟路径就要作出相应的改变才能继续正常使用。
细节:
在 ASP.NET 中,*.aspx 页面里的 Request、Response、Server 等都只是一个属性,而不是一个对象。
细节:
在 *.aspx 页面中,在 Request 属性下:
1. AppRelativeCurrentExecutionFilePath 属性可以返回当前正在执行的页面文件的相对于“应用”根目录的虚拟路径,以“~”开头,如:“~/Handler.aspx”。
2. PhysicalApplicationPath 属性可以返回当前正在执行的页面文件所属的“应用”的物理路径,如:“D:\我的文档\Visual Studio 2008\WebSites\WebSite4\”。
3. UrlReferrer 属性可以获得网页的来源,可以根据这个来判断从百度搜索的哪个关键词、防下载盗链、防图片盗链,可以伪造。
细节:
*.aspx 文件适合用来返回 html 内容的场合,而 *.ashx 文件则适用于用来返回非 html 内容的场合。虽然可以把 *.aspx 文件用在返回非 html 内容的场合,但不建议这样,因为 *.aspx 是专门为返回 html 内容的场合而量身定做的。
重点:
*.aspx 页面中的 PageLoad 事件触发的时机是:在所有 html 页面文档代码被渲染之前,例如:如果在 PageLoad 事件中有“Response.Write("<script type = "text/javascript">alert('PageLoad 事件触发的动作');</script>");”,则客户端打开该页面后,打开“查看源代码”,可以看到字符串“<script type = "text/javascript">alert('PageLoad 事件触发的动作');</script>”是在源代码的最前面。
细节:
*.aspx 页面中的 Response.Redirect("") 方法可以用来防止(以 post 方式提交页面的情况下)手动刷新浏览器时提示“重试”。
细节:
1. Server.HtmlEncode() 和 Server.UrlEncode() 的区别是:前者(Server.HtmlEncode())是用来对 html 内容的 Encode,而后者(Server.UrlEncode())则是用来对 Url 地址内容的 Encode。
2. Server.HtmlDecode()、Server.HtmlEncode()、Server.UrlEncode()、Server.UrlDecode() 只是对 HttpUtility 类中的相应方法的一个代理调用,建议用 HttpUtility,因为有的地方很难拿到 Server 对象。
重点:
Response.Redirect() 和 Server.Transfer() 的区别:
1. Response.Redirect() 是重定向浏览器到新的页面地址;而 Server.Transfer() 则是内部重定向请求,把用户的请求重定向给另外一个 *.aspx 页面处理程序来处理,是服务器内部的接管,浏览器端是意识不到这个接管的,不是像 Response.Redirect 那样经历“通知浏览器‘请重新访问网址为 url 的另一个页面’和浏览器接到命令访问新网址的过程”,是一次 http 请求,因此客户端浏览器的地址栏不会变化。
2. 同时,也因为 Server.Transfer() 是内部接管,所以在被重定向到的页面中是可以访问到 Request、Cookies 等这些源页面接收回来的参数的,就像这些参数是从源页面传递给目标页面似的,而 Response.Redirect() 则不行,因为是让浏览器重新去链接访问的。
3. Server.Transfer() 是内部接管,因此不能像 Response.Redirect() 那样重定向到外部网站。
4. 使用 Server.Transfer 不能直接重定向到 *.ashx,否则会报错“执行子请求出错”。(知道即可)
细节:
如果每次响应都创建一个对象的话会非常消耗资源,因此服务器可能会对于多个请求重用一个对象,这样如果实现 IHttpHandler 的 IsReusable 方法返回 true,那么就表示这个 HttpHandler 对象允许被重用,这样可以有效提高服务器性能。一般返回 true 就可以。
细节:
如果 HttpHandler 输出的是 html、txt、jpeg 等类型的信息,浏览器默认情况下会直接显示,如果希望以弹出保存对话框的形式来下载或打开,则需要添加 Header(即报文头):“string encodeFileName = HttpUtility.UrlEncode("过滤词.txt");Response.AddHeader("Content-Disposition", string.Format("attachment;filename = \"{0}\"", encodeFileName))”。其中 filename 后面的参数值为编码后的默认保存文件名,如果含有未编码的非正常字符,则会显示乱码的文件名。
原则:
可以直接将生成的内容以流的形式输出给客户端浏览器,就不要在服务器端生成临时文件。
细节:
在 ASP.NET 中,数据库文件一般情况下都建议放在项目下的自带“App_Data”文件夹下,这样不仅可以提高安全性(App_Data 文件夹下的所有文件都禁止客户端触碰),还可以更有效地管理(例如:ADO.NET 中的数据库的连接字符串中的“|DataDirectory|”所指代并对应的路径在 WebForm 中会默认地设置成“App_Data”文件夹,这样就不需要修改连接字符串了)。
细节:
1. 在 ASP.NET 的 WebSite 中,所有的非页面的 C# 代码一般都要求放在项目自带的 App_Code 文件夹中,而这在 WebApplication 中则不要求了。
2. 而对于“所有的数据库文件(如:*.mdf,*.mdb 等)都要放到项目自带的 App_Data 文件夹中”的规定则无论是 WebSite 还是 WebApplication 都要遵守。
细节:
在 WebForm 中的 TextBox 的 TextMode 属性可以把该 TextBox 设置成三种不同的类型,分别是“SingleLine”、“MultiLine”、“Password”三种,分别对应 html 页面中的“<input type = "text">”、“<textarea>”和“<input type = "password">”。
细节:
使用 Linq 的扩展方法 Single() 可以取得数据集的第一条数据,且是唯一一条数据,如果数据为 0 条或多条,则抛出异常。
技巧:
只要把 *.aspx 页面最顶端的 让 WebApplication 可以像 WebSite 那样修改后不用重启浏览器就立即起作用的小技巧,但真正工作中绝不建议这样。