.Net培训个人总结笔记35

学习交流,欢迎转载。转载请注明文章来源:http://www.cnblogs.com/lgjspace/archive/2011/01/12/2214013.html

技巧:
之前讲过的 WebSite 和 WebApplication 的区别中老师提到,WebSite 中代码被修改后立即生效,不用重启浏览器,而 WebApplication 中代码被修改后则不会立即生效,需要重启浏览器才能生效。之所以会这样,是因为在 WebSite 中 VS 会监测 C# 代码有否被修改,若有则立刻生成解决方案,自动重新编译;而在 WebApplication 中 VS 则不会这样。

两个小技巧:
1.用“生成”来代替“重启IE”;
2.用后面的设置技巧代替“设为起始页”:“右击项目的 属性→Web→当前页面”;

细节:
在 aspx 页面中, *.aspx 就是一个模板,而 *.aspx.cs 则是 C# 代码,这种“前 *.aspx 后 *.aspx.cs”就叫做CodeBehind,*.aspx 控制页面的显示样貌,而 *.aspx.cs 控制后台的业务逻辑。

细节:
在 *.aspx 模板中是可以使用 C# 代码的,其中“<% 代码内容 %>”表示执行当前的 C# 代码内容,而“<% =代码内容 %>”则表示执行当前的 C# 代码内容,并把返回值填充到当前的位置。

细节:
*.aspx 和 *.aspx.cs 不是同属于一个类,因为在 *.aspx 中访问不了在 *.aspx.cs 中的 private 成员,同时 internal 的级别成员也是访问不了。但 protected、protected internal、public 等访问级别都可以。

CodeBehind 重点:
*.aspx 页面之所以可以写 C# 代码并且可以调用 *.aspx.cs 中的 C# 代码,是因为在 ASP.NET 中,VS 会为 *.aspx 模板页面中的 C# 代码生成一个类(假设类名为 B),而这个类 B 继承自 *.aspx.cs 文件中的 C# 代码所属的类(假设类名为 A),即 B: A,类 B 中的 C# 代码即 *.aspx 页面中的 C# 代码,而类 A 中的 C# 代码则为 *.aspx.cs 文件中的 C# 代码。
其实在 *.aspx 模板页面中的顶行已经有相关的提示,即“Inherits="*.aspx.cs 文件中的类的类名"”,这说明了 *.aspx 模板页面的 C# 代码所属的类(即上述的 B 类)是对应的 *.aspx.cs 文件中的类的子类。

区别:
服务端控件的 Visible = false 不同于客户端浏览器页面中 Javascript 代码的 style.display='none',两者的效果不一样,前者是直接没有渲染该控件到客户端中,而后者的客户端页面则存在该控件标签,只是没有显示到浏览器页面中而已,右键“查看源文件”还是可以看到被隐藏的控件标签及其内容。

细节:
ASP.NET 中的服务器端的 Label 默认情况下会在客户端中被渲染成 html 中的 span 标签,但如果设置了 Label 控件的 AssociatedControlID,把它和某控件关联上,则该 Label 会在客户端中被渲染成 label 标签,而且点击该 label 时,和它关联的控件可以获得焦点。

细节:
1. 服务器端的 Literal 控件在客户端中不会被渲染成任何的标签,只是把控件中的字符串内容直接地放到对应的位置中而已。
2. 另外,如果把 Literal 控件的 Mode 属性设置为 Encode 的话,还可以为该控件中的 Text 属性内容进行自动的 Encode 操作,可以避免 XSS 漏洞攻击。

细节:
服务器端的 RadioButton 控件在客户端中被渲染成 type = radio 的 input 标签,在服务器端可以通过该控件的 GroupName 属性来进行分组,该 GroupName 属性对应着客户端浏览器中的 GroupName。


区别:
1. 服务端控件中,普通的 Button 在客户端的 html 页面中被渲染成 <input type = "submit" /> 的 input 标签;而 LinkButton 在客户端的 html 页面中被渲染成 <a href = "javascript:_doPostBack('','')">LinkButton</a> 的 a 标签;而 ImageButton 则在客户端中会被渲染成 <input type = "image" /> 的 input 标签。
2. LinkButton 用右键点击“在新窗口中打开”的话会没有效果,因为标签的链接地址不是一个 URL,而是一段 Javascript 代码。因此也不要用 LinkButton 来实现普通的超链接。

细节:
通过 Command、CommandArgument、CommandName 可以实现“让多个 Button 共享一个事件响应函数”的效果。

细节:
服务器端的 Panel 控件默认情况下在客户端 html 页面中被渲染成 <div></div> 标签,而如果对 Panel 的 GroupingText 属性设上一个值,则该 Panel 控件在客户端的 html 页面中会被渲染成类似于 WinForm 中的容器控件 GroupBox 的 <fieldset><legend>标题名称</legend></fieldset> 标签,但此时该 <fieldset></fieldset> 标签的外面仍然还有一个 <div> </div> 标签包裹着。

细节:
1. 如果设定 HyperLink 控件的 ImageUrl 属性,则会显示图片超链接。
2. HyperLink 的优势在于会自动将虚拟路径转换为客户端路径。

区别:
HyperLink 和 LinkButton 的区别
1. LinkButton 只是一个“类似于超链接的 Button”,本质上还是一个 Button;而 HyperLink 则纯粹是一个普通的超链接。
2. HyperLink 是直接打开 NavigateUrl 属性中指定的 Url 地址,没有提交页面的操作,点击控件后服务器端根本不知道客户端有点击控件的操作,所以不会有“PostBack”的行为;而 LinkButton 则会提交页面的表单,因此点击控件后会有“PostBack”的行为,会触发服务端的事件和方法。

细节:
1. 服务器端的 FileUpLoad 控件在客户端浏览器中会被渲染成 type = "file" 的 <input /> 标签。
2. 用 FileUpLoad 控件的 HasFile 属性可以判断用户是否已经选择了要上传的文件。

安全性:
为了保障服务器端的安全,尽量不要把用户上传的文件保存到磁盘上。

经验:
ASP.NET 中服务端的 Image 和 ImageButton 的区别:
1. Image 只是一个普通的图片框控件,只负责把 ImageUrl 属性中指定的图片镶嵌到相应的位置上;而 ImageButton 则相当于是一个带图片的按钮,按钮的图片来源于该 ImageButton 的 ImageUrl 属性中指定的地址,点击图片后可以触发客户端的 onclick 事件(即相对于服务端的 OnClientClick 属性)。
2. 在客户端的浏览器中,Image 被渲染成:<img id="Image1" src="图片路径" />,而 ImageButton 则被渲染成:<input type="image" name="ImageButton1" id="ImageButton1" src="图片路径" />。

细节:
母版页中的相对路径问题:
在母版页中调用的样式表的路径 VS 会自动帮我们转换,而如果母版页中使用了普通的 HTML 控件,由于普通 HTML 控件使用的是相对路径而不是虚拟路径,所以如果这些在母版页中的 HTML 控件通过相对路径引用了外部资源,而且不在同一个路径下的子页面使用了该母版页,可能会出现“找不到资源”的情况。

细节:
在 ASP.NET 中,一般实现了 IEnumerable 接口的数据都可以用以下的方式来为控件绑定:
BulletedList1.DataSource = new int[] { 3, 2, 5, 6, 0, 8 };
BulletedList1.DataBind(); //必须要加上这句代码,数据才会被绑定到控件中。

细节:
不久之前已经说过,在 *.aspx 页面中,如果在服务端 ASP.NET 控件的属性的值中使用 C# 代码(如:<%=Button1.ClientID %>),则会造成服务器端编译器渲染到客户端浏览器上的源文件出现由 Encode 导致的错误,但经测试,“<%#Eval("PicPath")%>”有点例外,例如在服务端 Image 控件中设定属性“ImageUrl = '~/objdatasrc/images/<%#Eval("PicPath")%>'”(这里的 <%#Eval("PicPath")%> 所返回的值为图片文件名,例如:1.jpg)时,会出现上述错误,而如果属性值中不含“~/objdatasrc/images/”等除 C# 代码之外的字符时,则不会出现上述错误,原因暂时不明。

原文地址:https://www.cnblogs.com/lgjspace/p/2218287.html