网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 大学论文导航 设计下载 最新论文 下载排行 原创论文 论文源代码
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > ASP.net > 正文

IsPostBack介绍

来源:http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/13
Redirect向其他画面迁移时Response.Form=null,Response.QueryString=null,所以可以判断是IsPostBack=false。但是使用

Response.Redirect方式向自画面迁移时Response.QueryString<>null,所以要特殊判断。

3.2 this._isCrossPagePostBack

if (this._isCrossPagePostBack)

{

return true;

}

在Page的PreviousPage属性中会对_isCrossPagePostBack进行设置,具体代码如下:

public Page PreviousPage

{

get

{

ITypedWebObjectFactory vPathBuildResult = (ITypedWebObjectFactory) BuildManager.GetVPathBuildResult(this.Context,

this._previousPagePath);

if (typeof(Page).IsAssignableFrom(vPathBuildResult.InstantiatedType))

{

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

if (this._pageFlags)

{

return false;

}

在Page. ProcessRequestMain中有如下的代码片断对_pageFlags进行赋值。

else if (!this.IsCrossPagePostBack)

{

VirtualPath path = null;

if (this._requestValueCollection["__PREVIOUSPAGE"] != null)

{

try

{

path = VirtualPath.CreateNonRelativeAllowNull(

DecryptString(this._requestValueCollection["__PREVIOUSPAGE"]));

}

catch (CryptographicException)

{

this._pageFlags = true;

}

if ((path != null) && (path != this.Request.CurrentExecutionFilePathObject))

{

this._pageFlags = true;

this._previousPagePath = path;

}

}

}

解密发生异常时_pageFlags为true这种异常发生的可能性比较小我们忽略,重点看另外一种情形,将这种情形的所有条件结合起来就是

IsCrossPagePostBack=false && _requestValueCollection["__PREVIOUSPAGE"] != null && path != null && (path !=

this.Request.CurrentExecutionFilePathObject)。发生跨页提交时对于目标页面IsCrossPagePostBack=false,此时源页面

的"__PREVIOUSPAGE"等信息会提交给目标页面,所以_requestValueCollection["__PREVIOUSPAGE"] != null。此时当前请求的

CurrentExecutionFilePathObject是根据目标页的路径生成的,与使用_requestValueCollection["__PREVIOUSPAGE"]生成的path对象不同。

此处得出结论⑥发生跨页提交(CrossPagePostBack)时目标页面是IsPostBack=false。为什么需要对CrossPagePostBack的目标页面做这样的

处理呢?发生CrossPagePostBack时,会将源页面的信息提交给目标页面此时Request.Form!=null,而且包括__VIEWSTATE等键按照其他的规

则会判断为IsPostBack=true,所以需要对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

  • 上一篇资讯: Visual Studio 2008 快捷键
  • 网学推荐

    免费论文

    原创论文

    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号