标签:
1 aspx的语法介绍:
web窗体有三个文件,WebForm_Add.aspx类似html页面,WebForm_Add.aspx.c是触发的事件,WebForm_Add.aspx.designer.cs是控件元素的声明。
web窗体中局部变量可以声明在.aspx中,成员变量可以声明在.aspx.cs中。
.aspx中可以用<% %>写C#代码,可以用<%=name %> 和<%Response.Write(name); %>进行变量输出。
<div> <%=name %><br /> <% var age = 18; %> <%=age %><br /> <ul> <% for (var i = 0; i < 10;i++ ) { %> <li><%=i %></li> <li><%Response.Write( i+1); %></li> <li><%Response.Write(age + i); %></li> <% } %> </ul> </div> <!-- name声明在了.aspx.cs中,至少是protected级别 -->
2 .aspx与.aspx.cs的关系:
.aspx.cs与.aspx.designer.cs是部分类,是同一个类WebForm_Add.cs,继承了IHttpHandler,
同时有一个动态类.day5_webform_add_aspx.cs 继承WebForm_Add.cs,
而day5_webform_add_aspx.cs 通过反编译可以看到它对 .aspx进行了字符串的替换和拼接,最终输出了html。
如果父类WebForm_Add.cs有private字段,则子类day5_webform_add_aspx.cs 无法继承,也就无法用来替换.aspx 中的变量(被‘《%’标记的字符串)。
总之,.aspx只是一个准备被替换和处理的模板,.aspx.cs和.aspx.designer.cs 是同一个类 WebForm_Add.cs,有一个动态的子类day5_webform_add_aspx.cs继承它。这个子类才是真正从事IHttpHandler的工作,进行替换和拼接,并最终生成html的类。
public partial class WebForm_Add : System.Web.UI.Page { protected string name = "茹鹏伟"; protected void Page_Load(object sender, EventArgs e) { Context.Response.Write(this.GetType() + "<br/>"); Context.Response.Write(this.GetType().Assembly.Location + "<br/>"); Context.Response.Write(this.GetType().BaseType + "<br/>"); Context.Response.Write(this.GetType().BaseType.Assembly.Location + "<br/>"); } }
输出结果是:
ASP.day5_webform_add_aspx
C:\Users\yangguo\AppData\Local\Temp\Temporary ASP.NET Files\vs\758cfd64\1e0a1365\App_Web_ieh4u1km.dll
Web_Cassini.Day5.WebForm_Add
C:\Users\yangguo\AppData\Local\Temp\Temporary ASP.NET Files\vs\758cfd64\1e0a1365\assembly\dl3\5c75bb14\eb2719c0_a2e8d001\Web_Cassini.dll
标签:
原文地址:http://www.cnblogs.com/adolphyang/p/4787054.html