首次请求default.aspx页面时会发生什么?
.net纯粹是一个纯粹的面向对象框架。
_default是一个扩展Page。
的类无需实例化,无法调用Pre-Init,Init,Load。 那么_default类是如何实例化的呢? 谁对此负责?
我想知道非常详细的技术步骤?
Pleasa澄清!
答案 0 :(得分:5)
ASP.Net框架确定请求是针对页面default.aspx
并检查相应的.aspx文件的标记 - 使用它来生成基于该标记的类。该类的基类在@Page
指令中标识:
<%@ Page ... Inherits="WebApplication1._Default" %>
然后创建生成的类型的实例 - 此类型继承自给定的基类,在本例中为WebApplication1._Default
。
ASP.Net框架通常(永远不会)直接创建“代码隐藏”类的实例。
您可以通过调试简单的Web应用程序来自行查看:
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
// default_asp NOT _Default as you might expect
string typeName = this.GetType().Name;
}
}
这解释了为什么事件处理程序只需要标记为受保护而不是公共。
如果您非常热衷于使用this.GetType().Assembly.CodeBase
获取生成的程序集的路径,请复制该文件并检查生成的类,如IL Spy。
答案 1 :(得分:1)
当请求是针对.aspx资源时,处理程序是一个页面 handler-即继承自Page的类的实例。该 存储资源类型和处理程序类型之间的关联 在应用程序的配置文件中
特定页面的HTTP处理程序的类型取决于URL。 第一次调用URL时,将组成一个新类 动态编译为程序集。该类的源代码是 检查.aspx源的解析过程的结果。该 class被定义为命名空间ASP的一部分,并给出了一个名称 模仿原始网址。例如,如果URL端点是 page.aspx,该类的名称是ASP.Page_aspx。班级名称, 但是,可以通过设置ClassName以编程方式控制 @Page指令中的属性。
HTTP处理程序的基类是Page 。这个类定义了 所有页面处理程序共享的最小方法和属性集。该 Page类实现了IHttpHandler接口。
在几种情况下,实际处理程序的基类 不是Page而是一个不同的类。例如,如果发生这种情况 使用代码隐藏。代码隐藏是一种开发技术 将页面所需的代码隔离到单独的C#或Microsoft中 VisualBasic®.NET类。页面的代码是事件集 实际创建行为的处理程序和帮助程序方法 页。可以使用内联函数定义此代码 标记或放置在外部类中 - 代码隐藏类。一个 代码隐藏类是一个继承自Page和specialized的类 它有额外的方法。指定时,使用代码隐藏类 作为HTTP处理程序的基类。
答案 2 :(得分:1)