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

IsPostBack介绍

来源:http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/13
lueCollection等于null时IsPostBack就等于false。

在Page.ProcessRequestMain(bool, bool)中有如下的代码:

if (this.PageAdapter != null)

{

this._requestValueCollection = this.PageAdapter.DeterminePostBackMode();

}

else

{

this._requestValueCollection = this.DeterminePostBackMode();

}

PageAdapter.DeterminePostBackMode最终还是调用了Page.DeterminePostBackMode,下面我们看Page.DeterminePostBackMode如何实现。

protected internal virtual NameValueCollection DeterminePostBackMode()

{

if (this.Context.Request == null)

{

return null;

}

if (this.Context.PreventPostback)

{

return null;

}

NameValueCollection collectionBasedOnMethod = this.GetCollectionBasedOnMethod(false);

if (collectionBasedOnMethod == null)

{

return null;

}

bool flag = false;

string values = collectionBasedOnMethod.GetValues((string) null);

if (values != null)

{

int length = values.Length;

for (int i = 0; i < length; i++)

{

if (values[i].StartsWith("__VIEWSTATE", StringComparison.Ordinal) ||

(values[i] == "__EVENTTARGET"))

{

flag = true;

break;

}

}

}

if (((collectionBasedOnMethod["__VIEWSTATE"] == null) && (collectionBasedOnMethod["__VIEWSTATEFIELDCOUNT"] == null)) &&

((collectionBasedOnMethod["__EVENTTARGET"] == null) && !flag))

{

return null;

}

if (this.Request.QueryStringText.IndexOf(

HttpResponse.RedirectQueryStringAssignment, StringComparison.Ordinal) != -1)

{

collectionBasedOnMethod = null;

}

return collectionBasedOnMethod;

}

这个函数中返回null就意味者IsPostBack=false,将上面函数中每个返回为null的地方作如下的分析。

3.1.1 this.Context.Request == null

if (this.Context.Request == null) { return null; }this.Context.Request == null应该只有在异常的情况下会发生,

正常情况下会在HttpRuntime.ProcessRequestInternal中创建HttpContext及HttpRequest对象。

3.1.2 this.Context.PreventPostback

if (this.Context.PreventPostback) { return null; }在HttpServerUtility.Transfer中会使用PreventPostback,其代

码如下:

public void Transfer(string path)

{

bool preventPostback = this._context.PreventPostback;

this._context.PreventPostback = true;

this.Transfer(path, true);

this._context.PreventPostback = preventPostback;

}

在调用Server.Transfer进行画面迁移时设置Context.PreventPostback=ture。此处得出结论①:对于使用Server.Transfer进行迁移时迁移到

的页面其IsPostBack=false。

3.1.3 collectionBasedOnMethod == null

NameValueCollection collectionBasedOnMethod = this.GetCollectionBasedOnMethod(false);

if (collectionBasedOnMethod == null)

{

return null;

}

调用了Page.GetCollectionBasedOnMethod后其返回值进行判断。如果其返回值为null则IsPostBack为false。

Page.GetCollectionBasedOnMethod的定义如下:

internal NameValueCollection GetCollectionBasedOnMethod(bool dontReturnNull)

{

if (this._request.HttpVerb == HttpVerb.POST)

{

if (!dontReturnNull && !this._request.HasForm)

{

return null;

}

return this._request.Form;

}

if (!dontReturnNull && !this._request.HasQueryString)

{

return null;

}

return this._request.QueryString;

}

从上面的代码可以看出返回值为null的情形是_request.HasForm=null或_request.HasQueryString=null。此处得出结论②:Post方式

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

    免费论文

    原创论文

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