net 继承控件事件????开篇:上一篇我们了解了一个ASP(2)

电脑杂谈  发布时间:2018-01-25 18:03:44  来源:网络整理

一个十分有价的问题就是在什么事件中我们又可以做些什么?下表就展示了这个问题的答案:

在ASP.NET中我们通常使用OutputCache指令做缓存。在这个事件中,ASP.NET运行时确定是否能够从缓存中加载页面,而不是从头开始生成。任何缓存的具体活动可以被注入这里。

我们可以通过一个示例程序代码来展示以上介绍的那些事件是怎样被最终触发的。在这个示例中,我们已经创建了一个HttpModule和HttpHandler,并且也在所有的事件中通过添加自定义逻辑代码展示了一个简单的响应。

C#控件事件_select控件事件_net 继承控件事件

下面是HttpModule类,它跟踪了所有的事件并将其添加到了一个全局的集合中。

下面是HttpHandler类的一个代码片段,它跟踪了ProcessRequest事件。

同上,我们也可以跟踪来自ASP.NET Page页面的所有事件。

下图则显示了上面我们所讨论的所有事件的执行顺序:

在ASP.NETWebForm应用中,其在请求处理管道中主要经历了三个重要阶段:

从上面的介绍中可以看到,第八个事件是:PostMapRequestHandler。在这个事件中,对于访问不同的资源类型,ASP.NET具有不同的HttpHandler对其进程处理。对于每个请求,ASP.NET会通过扩展名选择匹配相应的HttpHandler类型,成功匹配后,该实现被触发。因此,如果请求的扩展名是.aspx,便会生成Page类对象,而Page类对象是实现了IHttpHandler接口的。net 继承控件事件

sessionId

从上面的介绍中可以看到,第九到第十个事件是:AcquireRequestState,PostAcquireRequestState。这期间首先会接收到浏览器发过来的SessionId,然后先会将IHttpHandler接口尝试转换为IRequiresSessionState接口,如果转换成功,ASP.NET会根据这个SessionId到服务器的Session池中去查找所对应的Session对象,并将这个Session对象赋到HttpContext对象的Session属性。如果尝试转换为IRequiresSessionState接口不成功,则不加载Session。

sessionstate

从上面的介绍中可以看到,第十一和第十二个事件是:PreRequestHandlerExecute,PostRequestHandlerExecute。在这两个事件之间,ASP.NET最终通过请求资源类型相对应的HttpHandler实现对请求的处理,其实现方式是调用在第八个事件创建的页面对象的ProcessRequest方法。

在FrameworkInitialize()这个方法内部就开始打造WebForm的页面控件树,在其中调用了ProcessRequestMain方法,在这个方法里面就执行了整个ASP.NET WebFom页面生命周期。至于WebForm页面生命周期的细节,我们在本系列后续的Part 4再来细细研究。

当我们直接使用*.ashx页面的时候,它的ProcessRequest()方法就直接调用了一个FrameworkInitialize(),并最终生成响应报文,发送回客户端。

当我们在使用*.aspx页面的时候,它继承自Page类,而Page类实现了IHttpHandler接口,然后了调用Page类的ProcessRequest()方法,其中会构建页面控件树,然后一个一个地去呈现。

在ASP.NET MVC中,最核心的当属“路由系统”,而路由系统的核心则源于一个强大的System.Web.Routing.dll组件。


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-62760-2.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    • 后废帝刘昱
      后废帝刘昱

      #杨洋icon##杨洋微微一笑很倾城##杨洋肖奈##杨洋轻奢young#看着你慢慢绽放~

    热点图片
    拼命载入中...