ASP.NET中防止页面多次加载的IsPostBack属性
2015-11-02 21:59
627 查看
查查msdn,上边有IsPostBack的定义:获取一个值,该值指示该页是否正为响应客户端回发而加载,或者它是否正被首次加载和访问。如果是为响应客户端回发而加载该页,则为 true;否则为 false。
首先,有个问题,web页面是如何加载的,客户端浏览器服务器端发送请求,服务器端将请求发送到客户端,服务器端将释放客户端的请求。
第二个问题,为什么要防止页面多次加载,根据上述的加载过程我们知道,当点击页面的提交按钮后,浏览器会重新从服务器加载数据,原来的数据就无效,所以我们只需要用isPostBack的true值即页面第一次加载,客户端的的隐藏控件viewstate将会保存客户端的数据,即不需要重新加载。
例如一个简单的登陆代码如下:
[plain] view
plaincopyprint?
protected void Page_Load(object sender, EventArgs e)
{
this.txtUserName.Text = "";
this.txtUserPwd.Text = "";
this.btnExit .Attributes .Add("onclick","window.close();");
}
protected void btnLogin_Click(object sender, EventArgs e)
{
if (this.txtUserName.Text == "a" && this.txtUserPwd.Text == "a")
{
this.lblMessage.Text = "登录成功";
}
else {
this .lblMessage .Text ="登录失败";
}
}
显示的界面如下:即第一次输入错误的用户名和密码时会提示登陆失败。
当我重新输入正确的用户名和密码时:页面还是会提交失败。
原因在于,点击登录后系统没有重新作出回应。
解决方案:将上述代码改为:
[html] view
plaincopyprint?
protected void Page_Load(object sender, EventArgs e)
{
if(!Page.IsPostBack ){
this.txtUserName.Text = "";
this.txtUserPwd.Text = "";
}
this.btnExit .Attributes .Add("onclick","window.close();");
}
protected void btnLogin_Click(object sender, EventArgs e)
{
if (this.txtUserName.Text == "a" && this.txtUserPwd.Text == "a")
{
this.lblMessage.Text = "登录成功";
}
else {
this .lblMessage .Text ="登录失败";
}
}
更改后的界面显示
整理了现阶段能看懂的几种网上总结:
结论① 对于使用Server.Transfer进行迁移时迁移到的页面其IsPostBack=false。
结论② Post方式如果Request中没有请求值,即Request.Form =null则IsPostBack=false;Get方式如果Request中没有请求值,即Request.QueryString =null则IsPostBack=false。
结论③ 如果QueryString或Form虽然有请求值,但是QueryString或Form中的
Key“__VIEWSTATE”和“__EVENTTARGET”和“__VIEWSTATEFIELDCOUNT”,并且没有键为“null”,值以“__VIEWSTATE”开头并且也没有值为“__EVENTTARGET”的键值对,则IsPostBack=false。
结论④ 使用Response.Redirect方式向自画面迁移时,此时IsPostBack=false。
刚开始接触asp.net问题百出呀真是!此博客仅供初学者理解。如有错误还请指正。
首先,有个问题,web页面是如何加载的,客户端浏览器服务器端发送请求,服务器端将请求发送到客户端,服务器端将释放客户端的请求。
第二个问题,为什么要防止页面多次加载,根据上述的加载过程我们知道,当点击页面的提交按钮后,浏览器会重新从服务器加载数据,原来的数据就无效,所以我们只需要用isPostBack的true值即页面第一次加载,客户端的的隐藏控件viewstate将会保存客户端的数据,即不需要重新加载。
例如一个简单的登陆代码如下:
[plain] view
plaincopyprint?
protected void Page_Load(object sender, EventArgs e)
{
this.txtUserName.Text = "";
this.txtUserPwd.Text = "";
this.btnExit .Attributes .Add("onclick","window.close();");
}
protected void btnLogin_Click(object sender, EventArgs e)
{
if (this.txtUserName.Text == "a" && this.txtUserPwd.Text == "a")
{
this.lblMessage.Text = "登录成功";
}
else {
this .lblMessage .Text ="登录失败";
}
}
显示的界面如下:即第一次输入错误的用户名和密码时会提示登陆失败。
当我重新输入正确的用户名和密码时:页面还是会提交失败。
原因在于,点击登录后系统没有重新作出回应。
解决方案:将上述代码改为:
[html] view
plaincopyprint?
protected void Page_Load(object sender, EventArgs e)
{
if(!Page.IsPostBack ){
this.txtUserName.Text = "";
this.txtUserPwd.Text = "";
}
this.btnExit .Attributes .Add("onclick","window.close();");
}
protected void btnLogin_Click(object sender, EventArgs e)
{
if (this.txtUserName.Text == "a" && this.txtUserPwd.Text == "a")
{
this.lblMessage.Text = "登录成功";
}
else {
this .lblMessage .Text ="登录失败";
}
}
更改后的界面显示
整理了现阶段能看懂的几种网上总结:
结论① 对于使用Server.Transfer进行迁移时迁移到的页面其IsPostBack=false。
结论② Post方式如果Request中没有请求值,即Request.Form =null则IsPostBack=false;Get方式如果Request中没有请求值,即Request.QueryString =null则IsPostBack=false。
结论③ 如果QueryString或Form虽然有请求值,但是QueryString或Form中的
Key“__VIEWSTATE”和“__EVENTTARGET”和“__VIEWSTATEFIELDCOUNT”,并且没有键为“null”,值以“__VIEWSTATE”开头并且也没有值为“__EVENTTARGET”的键值对,则IsPostBack=false。
结论④ 使用Response.Redirect方式向自画面迁移时,此时IsPostBack=false。
刚开始接触asp.net问题百出呀真是!此博客仅供初学者理解。如有错误还请指正。
相关文章推荐
- 玩转树莓派--网卡配置
- 玩转树莓派--图形界面登陆
- 动态网站开发技术学习1:走进ASP.NET
- php、asp 发起post请求
- ASP.NET : 如何将服务端的多个文件打包下载
- ASP.NET : 如何将服务端的多个文件打包下载
- 【Asp.Net MVC】日常---路由
- asp.net 微信支付源码demo 官方坑爹
- .NET中First,FirstOrDefault,Single,SingleOrDefault的区别是什么
- ASP.NET MVC API 路由生成规则
- Asp.net实现直接在浏览器预览Word、Excel、PDF、Txt文件(附源码)
- ASP.NET如何使用web服务的会话状态
- asp.net中“从客户端中检测到有潜在危险的Request.Form值”错误的解决办法
- ASP.NET Identity Authentication
- AspectJ AOP切面编程(XML配置)
- vs2013下, asp.net mvc5 使用和发布rdlc报表的步骤 ,使用ef来获取数据
- Asp.net中的页面跳转及post数据
- CS1061: “ASP.send_aspx”不包含“sender_TextChanged”的定义,并且找不到可接受类型为“ASP.send_aspx”的第一个参数的扩展方法“sender_Text
- 玩转树莓派--树莓派准备工作
- asp.net报错“尝试读取或写入受保护的内存。这通常指示其他内存已损坏”的解决办法