关于asp.net中partial,asp.net编译笔记
一使用代码隐藏页
partial在.net2.0中是一个编译熟性,主要用来分离界面设计代码与用户的逻辑代码,比方添加一个使用隐藏代码的的页面,test.aspx,那么实际上会有两个类,三个cs文件,一个是test类(假设test.aspx在根目录下),test是部分类,页面设计代码中的一些控件会变量声明会在另个同类名的编译文件中自动生成,在编译后这两个类就合并成一个类即编译后的代码不会存在partial一说,而页面类test.aspx.cs会继承合并后的test类,并在控件树生成时将对应控件实例附值给test类的控件变量声明。
----------------Test部分类,隐藏部分代码------------------
public partial class Test: System.Web.SessionState.IRequiresSessionState {
#line 40 "D:\Projects\Trade.GYZS.NET\gyzs.net\Admin\BasicData\TradeClassEdit.aspx"
protected global::System.Web.UI.WebControls.TextBox txtParentName;
...}
-----------------Test部分类,用户定义部分------------------
public partical class Test:Page{...}
----------------Test Aspx页面代码--------------------------
public class Test_aspx : global::Test, System.Web.IHttpHandler {...}
二直接在aspx中包含代码
使用直接页时生成的代码不会使用部分类特性,参考下面的代码(asp.net2.0)
public class Test_aspx : global::System.Web.UI.Page, System.Web.SessionState.IRequiresSessionState, System.Web.IHttpHandler{...}
这个类在命名空间ASP下,页面上的控件标签在解析识别后,会变成Test_aspx类内部的保护变量,如:
#line 133 "D:\Projects\Trade.GYZS.NET\gyzs.net\UserCenter\Subscribe\SubscribeManager.aspx"
protected global::System.Web.UI.WebControls.Button butAdd;
这些变量在构建控件树时被实例化并。
-------------------------------------------
需要注意的是,不管使用隐藏代码还是直接页面,最后形成的执行类,Test_aspx类(最后执行用户请求的类是Test_aspx,注意IHttpHandler接口)其代码基本相同,多继承了Page类,实现了IHttpHandler接口与IRequiresSessionState接口(一个会话相关接口)。
------------------
补充:
在@Page 指顶Debug="true" 以使该页面编译的临时代码保存下来方便查看
在web.config 可以具体设置编译文件临时目录,查看生成的中间代码
<compilation tempDirectory="d:\compilationTemp" debug="true">
</compilation>