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

时间:2011-08-18 15:25:16

标签: c# asp.net

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

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

_default是一个扩展Page。

的类

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

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

Pleasa澄清!

3 个答案:

答案 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)

The ASP.NET Page Object Model

  

当请求是针对.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)