2011-08-18 49 views
3

第一次请求default.aspx页面时会发生什么?第一次请求default.aspx页面时会发生什么?

.net纯粹是一个纯粹的面向对象的框架。

_default是一个扩展Page的类。

没有实例化,无法调用Pre-Init,Init,Load。 那么_default类是如何实例化的? 谁负责?

我想知道非常详细的技术步骤?

Pleasa澄清!

回答

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

+0

谢谢[Kragen](http://stackoverflow.com/users/113141/kragen)! – MduSenthil

+0

非常有趣的细节,很酷! – sll

+0

我已经探索了简单的“default.aspx”页面的IL部分。我很清楚! :) – MduSenthil

1

The ASP.NET Page Object Model

当请求是一个.aspx资源的处理程序是一个页面 处理,即,从页面继承的类的实例。 资源类型和处理程序类型之间的关联存储在应用程序的配置文件中

特定页面的HTTP处理程序的类型取决于URL。 第一次调用URL时,会创建一个新类并动态编译为程序集。该类的源代码是 检查.aspx源代码的解析过程的结果。 类被定义为名称空间ASP的一部分,并被命名为 模仿原始URL。例如,如果URL端点是 page.aspx,则该类的名称是ASP.Page_aspx。尽管如此,类名称 可以通过在@Page指令中设置ClassName 属性进行编程控制。

HTTP处理程序的基类是Page。该类定义了所有页面处理程序共享的最少的一组方法和属性。 Page类实现IHttpHandler接口。

在几种情况下,实际处理程序 的基类不是Page,而是一个不同的类。例如,如果使用 代码隐藏,则会发生这种情况。代码隐藏是一种开发技术,它将页面所需的代码隔离到单独的C#或Microsoft Visual Basic .NET类中。页面的代码是实际创建 页面的行为的事件 处理程序和辅助方法的集合。此代码可以使用 标签内联定义,也可以放置在外部类 - 代码隐藏类中。 A 代码隐藏类是一种从Page继承的类,并使用额外的方法专门为其提供了 。指定时,使用代码隐藏类 作为HTTP处理程序的基类。

+0

很好的信息,澄清处理程序 - > Page - > Default.aspx – MduSenthil

1
+0

它真的描述这样的低级别的东西?我相信这是众所周知的生命周期,而不是页面类构建的这种细节,请纠正我,如果我错了,只是没有在生命周期概述中找到这个细节 – sll

相关问题