这个属性相信大家一定经常用吧 ,判断是否为回发 (切记这是判断是否回发 ,而听到很多人说这是判断是否第一次加载页面 ,还有的说是否为刷新 )很多人说做项目时pageload事件里都要加上,例如下面的代码:
protected void Page_Load(Object sender,EventArgs e)
{
if(!IsPostBack)
{
//执行页面首次请求时需要进行的操作;
}
}
但是确不太理解根本原,说加上这个肯定没错 ,然而不知根本终会出错。 所以 一定要理解原理~~
为了把这个说清楚 ,这里不用asp.net页面 用html+handler 一般处理程序来讲清这个属性。如下:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>关于IsPostBack的理解</title>
</head>
<body>
<form action="Hello.ashx" method="post">
<input type ="hiddle" name="isPostBack" class="haddile" name="isPostBack" value="http://www.mamicode.com/true"/>
<label>姓名:</label>
<input type="text" id="txtUserName" name="txtUserName" value ="http://www.mamicode.com/{userName}"/>
<label>年龄:</label>
<input type="text" id="txtUserAge" name="txtUserAge" value ="http://www.mamicode.com/{userAge}" />
<input type="submint" value="http://www.mamicode.com/提交" />
<label>{ErrorMsg}</label>
</form>
</body>
相关HttpHandler代码如下:
publci void ProcessRequset(HttpContext context)
{
context.Response.ContextType = "text/html";
string userName = context.Request["txtUserName"];
string userAge = context.Request["txtUserAge"];
string msg = string.Empty;
string isPostBack = context.Request["isPostBack"];
if(isPostBack == "true")//如果提交了该参数则说明是回发提交表单进行请求页面
{
context.Response.Write("表单提交回发请求页面");
msg = userName +"你好!";
}
else
{
context.Response.Write("首次请求页面");
userName = string.Empty;
mag = string.Empty;
userAge = string.Empty;
}
string fulPath = context.Server.MapPath("Hello.html");//得到文件全路径
string content = System.IO.File.ReadAllText(fullPath);//读取文件内容
content =content.Replace("{txtUserName}",userName);
content = content.Replace("{txtUserAge}",userAge);
content = content.Replace("{ErrorMsg}".msg,);
context.Response.Write(content);
}
public bool IsReusable
{
get{ return false;}
}
阅读代码相信大家一看就知道怎么回事儿,这里简要说下
运行HttpHandler因为第一次运行context.Request["isPostBack"]获取传进来的参数肯定是为null,所以会直接进入页面读取html,把首次请求处理的数据输出到html页面上。
(占位符{txtUserName})为了实现保存页面状态哦。
这时在html页面输入姓名和年龄点击提交时(包括以后提交)
<input type="hidden" name="ispostback" class="night" value="http://www.mamicode.com/true" />
isPostBack的Value一直是True,所以context.Request["isPostBack"]获取参数的值为“true”;这就造成了很多人说isPostBack是判断是否为第一次请求页面,其实当你进入页面后进行刷新操作时,依然会发现isPostBack不为True,原因是你并没有进行提交是想一次回发操作。
举个生活的实例吧
假如你去餐馆吃饭,那么餐馆就是相当于服务器,你就是客户端,那么餐馆服务员提交给你的菜单(相当于是网页首次打开,进行首次请求),然后你从菜单上点菜后将菜单返回给餐馆服务员(这个过程相当于是进行isPsotBack回发请求)。餐馆根据你的菜单做出你需要的才,上到你餐桌上(进行isPostBack后服务器返回给你的页面)。
其中的原理是就是这样,如各位有更好的理解说明,不妨贴出来分享下!!!
ASP.NET中IsPostBack的理解