分析下C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/Temporary ASP.NET Files里面的文件,看一下最终的页面类,如类Default2,三个文件分别写了asp.Default2_aspx类了Default2类
Default2类
根据aspx文件写的,
public partial class Default2 : System.Web.SessionState.IRequiresSessionState {
#line 18 "F:/web/AtlasWebSite2/Default2.aspx"
protected global::System.Web.UI.WebControls.Label Label1;
#line default
#line hidden
#line 16 "F:/web/AtlasWebSite2/Default2.aspx"
protected global::System.Web.UI.HtmlControls.HtmlForm form1;
#line default
#line hidden
protected System.Web.Profile.DefaultProfile Profile {
get {
return ((System.Web.Profile.DefaultProfile)(this.Context.Profile));
}
}
控件声明全在这里了
第二部分就是cs文件,这里不多产了,这样拼成了Default2类
asp.Default2_aspx类
声明如下,
namespace ASP {public class default2_aspx : global::Default2, System.Web.IHttpHandler{}}
基本上是从上到下的格式
自己写的方法(用script),如
public string a()
{
return "aaa";
}
看到没有自己在前台写的方法只在aspx类里面有,在父类Default2是没有的
首先生成title的方法,如private System.Web.UI.HtmlControls.HtmlTitle @__BuildControl__control3()
生成head private global::System.Web.UI.HtmlControls.HtmlHead @__BuildControl__control2()
看到控件label就生成label private global::System.Web.UI.WebControls.Label @__BuildControlLabel1()
生成 form1的 private global::System.Web.UI.HtmlControls.HtmlForm @__BuildControlform1()
展现form1的这里粘全
private void @__Renderform1(System.Web.UI.HtmlTextWriter @__w, System.Web.UI.Control parameterContainer) {
@__w.Write("/r/n <div>/r/n ");
parameterContainer.Controls[0].RenderControl(@__w);
#line 18 "F:/web/AtlasWebSite2/Default2.aspx"
@__w.Write(a());//看到没有,这是在前台写的过程如<%=a()%>如果没有写前台代码,这个方法就不会有.
#line default
#line hidden
@__w.Write("</div>/r/n ");
}
建立控件树 private void @__BuildControlTree(default2_aspx @__ctrl) 不知道干嘛的.
不知道的方法 protected override void FrameworkInitialize() public override int GetTypeHashCode()
因为继承httphandler嘛,所以有.
public override void ProcessRequest(System.Web.HttpContext context) {
base.ProcessRequest(context);
}
(搞了半天输出还是用page类的)
注意哦这里的类是asp.Default2._aspx它是继承Default2.的,所以这里的base当然是Default2.
最后还有一个 FastObjectFactory_app_web_uft5v__o类,我们可以理解为高效生成对象.
1.1的差不多,在继承类里实例化了服务器控件,但只有继承类代码,没有父类代码.
既然前台和后台都有了dll,那为什么还需要网页的存在,因为asp.net每次编译之前都要比较下aspx文件有没有什么变化,所以需要aspx文件存在.
好了,这里只是大概说一说,深入的话,网上有编文章叫深入剖析ASP.NET的编译原理之一:
http://www.cnblogs.com/artech/archive/2007/05/26/753620.html自己看看