• ASP.NET中防止页面重新加载的IsPostback属性


    查查 msdn, 上边有 IsPostBack 的定义: 获取一个值,该值指示该页是否正为响应客户端回发而加载,或者它是否正被首次加载和访问。如果是为响应客户端回发而加载该页,则为  true ;否则为  false

    首先,有个问题,web页面是如何加载的,客户端浏览器服务器端发送请求,服务器端将请求发送到客户端,服务器端将释放客户端的请求。

    第二个问题,为什么要防止页面多次加载,根据上述的加载过程我们知道,当第二次发送同样请求时,服务器端没有保存原来客户端的数据,那么展现给客户端浏览器为空或者仍然是原来的信息。

    例如一个简单的登陆代码如下:

    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 ="登录失败";
    			}
    
    		}
    

    显示的界面如下:即第一次输入错误的用户名和密码时会提示登陆失败。

    当我重新输入正确的用户名和密码时:页面还是会提交失败。

    原因在于,点击登录后系统没有重新作出回应。

    解决方案:将上述代码改为:

    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。

  • 相关阅读:
    ubuntu下android开发工作环境搭建
    ADB命令行控制界面开关
    chromium os系统编译与环境搭建
    完整代理的简单实现
    OC协议、代理的简单使用
    OC字典的使用
    OC数组的简单使用、NSArray
    OC中NSString的使用、字符串的使用
    OC内存管理、非ARC机制、MRR机制
    OC中重写set和get方法、懒加载
  • 原文地址:https://www.cnblogs.com/Jian-Zhang/p/6054255.html
Copyright © 2020-2023  润新知