IsPostBack深入探讨
this._previousPage = (Page) vPathBuildResult.CreateInstance(); this._previousPage._isCrossPagePostBack = true; this.Server.Execute(this._previousPage, TextWriter.Null, true, false); } } return this._previousPage; } } 在发生跨页面提交的时候,当访问PreviousPage属性的时候源Page的IsCrossPagePostBack会被设置true。此处得出结论⑤发生跨页提交(CrossPagePostBack),当访问PreviousPage属性的时候,对于源Page,IsPostBack=true。 3.3 this._pageFlags[8] if (this._pageFlags[8]) { return false; } 在Page. ProcessRequestMain中有如下的代码片断对_pageFlags[8]进行赋值。 else if (!this.IsCrossPagePostBack) { VirtualPath path = null; if (this._requestValueCollection["__PREVIOUSPAGE"] != null) { try { path = VirtualPath.CreateNonRelativeAllowNull( DecryptString(this._requestValueCollection["__PREVIOUSPAGE"])); } catch (CryptographicException) { this._pageFlags[8] = true; } if ((path != null) && (path != this.Request.CurrentExecutionFilePathObject)) { this._pageFlags[8] = true; this._previousPagePath = path; } } } 解密发生异常时_pageFlags[8]为true这种异常发生的可能性比较小我们忽略,重点看另外一种情形,将这种情形的所有条件结合起来就是IsCrossPagePostBack=false && _requestValueCollection["__PREVIOUSPAGE"] != null && path != null && (path != this.Request.CurrentExecutionFilePathObject)。发生跨页提交时对于目标页面IsCrossPagePostBack=false,此时源页面的"__PREVIOUSPAGE"等信息会提交给目标页面,所以_requestValueCollection["__PREVIOUSPAGE"] != null。此时当前请求的CurrentExecutionFilePathObject是根据目标页的路径生成的,与使用_requestValueCollection["__PREVIOUSPAGE"]生成的path对象不同。 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |