快速业务通道

IsPostBack深入探讨

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-04-12

此处得出结论⑥发生跨页提交(CrossPagePostBack)时目标页面是IsPostBackfalse。为什么需要对CrossPagePostBack的目标页面做这样的处理呢?发生CrossPagePostBack时,会将源页面的信息提交给目标页面此时Request.Form!=null,而且包括__VIEWSTATE等键按照其他的规则会判断为IsPostBacktrue,所以需要对CrossPagePostBack的目标页面做特殊的判断。

3.4        (this.Context.ServerExecuteDepth <= 0) || ((this.Context.Handler != null) && (base.GetType() == this.Context.Handler.GetType()))

HttpServerUtility中有如下的代码对Context. ServerExecuteDepth进行了操作。

public void Execute(string path, TextWriter writer, bool preserveForm)

{

try

{

this._context.ServerExecuteDepth++;

handler = this._context.ApplicationInstance.MapHttpHandler(this._context, request.RequestType, path3, filename, useAppConfig);

}

finally

{

this._context.ServerExecuteDepth--;

}

}

HttpServerUtility.ExecuteInternal中也有一处对Context.ServerExecuteDepth类似的操作。HttpServerUtility.Execute会调用HttpServerUtility.ExecuteInternal。从此可以看出Context.ServerExecuteDepth是表示Server.Execute中的执行深度。在调用Server.ExecuteContext.ServerExecuteDepth>0。另外调用Server.ExecuteContext.Handle中存储的还是原来的页对象,也就是说base.GetType()!= this.Context.Handler.GetType()。这样对于Server.Execute来说this.Context.ServerExecuteDepth <= 0) || ((this.Context.Handler != null)这个条件为false此处得出结论⑦使用Server.Execute迁移到的页面其IsPostBackfalse。此处我们会有疑问,为什么需要对Server.Execute进行特殊的判断呢?理由是使用Server.Execute时会将源Page中的隐含域提交,此时Request.Form!=null,而且包括__VIEWSTATE等键按照其他的规则会判断为IsPostBacktrue

3.5        this._fPageLayoutChanged

fPageLayoutChanged从这个变量的字面意思来看是PageLayout发生了变化。

Page.LaodAllState中代码片断如下:

private void LoadAllState()

{

string s = (string) second.First;

int num = int.Parse(s, NumberFormatInfo.InvariantInfo);

this._fPageLayoutChanged = num != this.GetTypeHashCode();

}

其意思是现在得到的HashCode和存储在ViewState中的HashCode不一致时fPageLayoutChangedtrueGetTypeHashCode()会返回一个HashCode,而且这个方法是对aspx进行编译的时候产生的,只有在页面上的元素发生了变化的时候其返回的值会发生变化。此处得出结论⑧Page运行期间其对应的DLL被更新了并且Page的树结构发生过变化,这种情况下请求时IsPostBackfalse

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号