繁体   English   中英

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

[英]What happens when default.aspx page is requested for the first time?

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

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

_default是一个扩展Page的类。

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

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

Pleasa澄清!

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

ASP.NET页面对象模型

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

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

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

在某些情况下,实际处理程序的基类不是Page而是另一个类。 例如,如果使用代码隐藏,就会发生这种情况。 代码隐藏是一种开发技术,它将页面所需的代码隔离到单独的C#或MicrosoftVisualBasic®.NET类中。 页面代码是实际创建页面行为的事件处理程序和帮助程序方法的集合。 此代码可以使用标记内联定义,也可以放在外部类中 - 代码隐藏类。 代码隐藏类是一个继承自Page的类,并使用额外的方法对其进行专门化。 指定时,代码隐藏类用作HTTP处理程序的基类。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM