asp.net解密一:页面重绘,IsPostBack
时间:2010-09-08 来源:喝高了点
新手入门,多多关照。
http协议是无状态的,当我们点击提交按钮后,提交到处理页面,如果处理页面时当前页面的话,在aspx页面中,我们看到的结果是提交前的页面和处理后的返回结果组合而成的页面。他的内部实现原理实际上是这样的:
用户点击提交后,读取原页面的内容,并重新写回到页面中,举例:文本框数字自增功能:
1.模板机制,新建一个html页IncNum.htm,作为模板
<html>
<body>
<form action="IncNum.ashx">
<input type="text" name = "txtnum" value="@balue"/>
<input type="hidden" name="IsPostBack" value="true"/>
<input type="submit" value = "自加"/>
</form>
</body>
</html>
2.新建一个ashx页面作为处理页面IncNum.ashx,处理代码如下
public void ProcessRequest (HttpContext context) {
context.Response.ContentType = "text/html";
string ispostback = context.Request["IsPostBack"];
string value ="0";
if(ispostback=="true")//是提交
{
int num = Convert.ToInt32(context.Request["txtnum"]);
num++;
value = num.TOString();
}
string fullpath = context.Server.MapPath("IncNum.htm");//获取模板文件的路径
string content=File.ReadAllText(fullpath);//读取模板文件
content = content.Replace("@value",num);将自加后的内容替换
context.Response.write(content);
}
public bool IsReusable {
get {
return false;
}
}
}
解释一:IsPostBack实际上就是表单中的隐藏域,它的value固定式true,当用户点击“自加”按钮后,IspostBack同样也被提交到服务器端,处理程序读出了这个值便可以判定页面是被提交的,然后读取提交值作相应处理,如果读不到,则页面时首次进入,我们可以欺骗服务器:直接在浏览器中输入地址http://localhost:1128/IncNum.ashx?IsPostBack=true,则处理程序会把页面当成提交的页面处理。
在aspx页面中的IsPostBack就是使用这个原理实现的。
解释二:ashx页面是给用户看的,html页面是模板页面,用户看不到,html页面中@value相当于是一个占位符,ashx页面读取html页面,并用字符串替换方法把占位符替换成处理后的值。然后重新写回到页面中,这就是为什么提交后的页面还会保持原来的样子。