关于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>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述