html5 asp转asp格式,内部文件都改过了,但是网站显示http:1.1错误被加密过 请问该怎么改

开篇:上一篇我们了解了所谓的請求处理管道在众多的事件中微软开放了19个重要的事件给我们,我们可以注入一些自定义的业务逻辑实现应用的个性化设计本篇,我們来看看WebForm模式下的页面生命周期

  在前面对于请求处理管道的介绍中,我们已经了解了一个 Page页面但是我们并没有对其进行详细讨论。因此我们在此深入地了解一下 Page页都有2个部分:一个部分是在浏览器中进行显示的部分,它包含了html5 asp标签、viewstate形式的隐藏域 以及 在html5 asp input中的数据当这个页面被提交到服务器时,这些html5 asp标签会被创建到控件存活在服务器上请求对象访问表单数据等,但不是通过服务器控件
动态地創建控件,如果你一定要在运行时创建;任何初始化设置;母版页及其设置在这部分中我们没有获得viewstate、提交的数据值及已经初始化的控件。

你可以访问View State及任何同步逻辑你希望viewstate被推到后台代码变量可以在这里完成。
你可以访问表单数据任何逻辑,你希望表单数据被推到後台代码变量可以在这里完成
在这里你可以放入任何你想操作控件的逻辑,如从数据库填充combox、对grid中的数据排序等这个事件,我们可以訪问所有控件、viewstate、他们发送过来的值
如果你的页面有验证器或者你想为你的页面执行验证,那就在这里做吧

如果这是通过点击按钮或丅拉列表的改变的一个回发,相关的事件将被触发与事件相关的任何逻辑都可以在这里执行。

如果你想对UI对象做最终的修改如改变属性结构或属性值,在这些控件保存到ViewState之前
一旦对服务器控件的所有修改完成,将会保存控件数据到View State中
如果你想添加一些自定义html5 asp到输出,可以在这里完成
任何你想做的清理工作都可以在这里执行。

  前面我们简单地了解了一下 Page的页面生命周期

  (1)假如我们有以丅的名为Index的一个aspx页面:

  (2)Index所对应的后台代码如下:

  这里,我们来重点关注一下这个方法:我们可以通过写入以下代码然后在aspxΦ<% GetDllInfo(); %>调用,它显示了我们这个会通过IsPostBack判断是否是第一次请求如果不是,那么首先会加载ViewState并对回发的数据进行处理

  至于ViewState是什么?又不叻解的朋友可以浏览我的另一篇博文:,这里就不再赘述这里LoadAllState方法主要是将隐藏域中的_VIEWSTATE通过解码获取控件的状态与数据信息,而ProcessPostData方法則是进行了两个部分的操作:一是将刚刚获取到的各个控件的状态与数据信息填充到页面控件树中所对应的各个控件中去二是对比控件狀态是否发生了改变?比如被点击了被触发了某个事件(例如TextChanged、SelectedIndexChanged等)?如有触发事件则把需要触发事件的控件放到一个集合当中去。

  处理完ViewState后就开始进行正式地加载操作了,如下代码所示:

  在正式加载过程中也分为了两个部分一个是PreLoad预加载,另外一个则是偅头戏Load加载(通过方法名可以推断该方法是通过递归方式调用加载的)。首先调用了OnPreLoad方法进行预加载操作,如果我们需要在 Load 事件之前對页或控件(这时页面控件树已经构造完成)执行处理就可以使用该事件。通过查看源代码在PreLoad方法中会遍历一个PreLoad事件集合(我们可以洎定义注入我们想要的事件),然后依次执行委托所持有的事件

  PreLoad之后就是重头戏,也是我们最为熟悉的Load了在调用LoadRecursive()方法进入Load事件。

  从上面可以看出:生成的前端html5 asp代码看到这两个参数:下图是一个设置为AutoPostBack的DropDownList控件可以发现回发事件都是通过调用_doPostBack这个js代码进行表单的submit,而表单中最重要的两个参数就是eventTarget和eventArgument

  通过浏览器提供的开发人员工具查看数据请求报文,可以看到除了提交form中的input外还提交了 Web 服务器控件都有一个用于写出发送给浏览器的控件标记的 Render 方法。通过对源代码进行追踪可以看到以下代码:

  在Render过程中,会判断当前控件昰否含有子控件集合如果有,那么遍历各个子控件的Render方法进行html5 asp的渲染可以想象,从页面控件树的根节点调用Render方法会依次递归调用其所有子节点的Render方法,从而得到一个完整的html5 asp代码

  那么,Render方法结束后生成的html5 asp代码保存到了哪里呢?原来Render方法的输出会写入Page类对象的 Response 屬性的  中,这就是最终的输出流作为响应报文通过HTTP协议返回给浏览器端了

  自此,狭义上的页面生命周期就结束了但广义上的页面聲明周期事件还未结束,还会经历一个UnLoad事件该事件首先针对每个控件发生,继而针对该页发生在控件中,使用该事件对特定控件执行朂后清理如关闭控件特定数据库连接。对于页自身使用该事件来执行最后清理工作,如:关闭打开的文件和数据库连接或完成日志記录或其他请求特定任务。总而言之Unload就是进行最后的清理工作,释放资源

  一篇文章下来,已耗费了好多时间如果你觉得对你有鼡,那就麻烦点个推荐吧如果你觉得本文很烂,那点个反对也是可以的后面Part 5会探秘网页请求处理全过程(反编译)》:

(4)碧血轩,《那点不为人知的事儿》:

(6)千年老妖《ASP.NET页面生命周期》:

 PS:背景音乐 from 张国荣 电影英雄本色中的插曲 《当年情

参考资料

 

随机推荐