Page_Load事件与IsPostBack属性

下面是一个登陆的界面:


 我们的需求是:

       第一次进入登陆界面时,用户名和密码应该为空,所以我们应该在Page_Load中将存放用户名和密码的两个文本框的内容清空。然后当我们单击登陆按钮时,将用户名和密码提交到服务器。

[vb]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. <span style="font-size:18px;">privatevoid Page_Load(object sender, EventArgs e)  
  2.     {  
  3.         {  
  4.             this.txtUserName.Text = "";  
  5.             this.txtUserPwd.Text = "";  
  6.         }  
  7.   }  
  8. privatevoid btn_Login(object sender, EventArgs e)  
  9.     {  
  10.         string userName = Request.Form["userName"].ToString();  
  11.         string userPwd = Request.Form.Get("userPwd").ToString();  
  12.         SqlConnection con = new SqlConnection("server=.;database=login;uid=sa;pwd=123456654321");  
  13.         SqlCommand cmd = new SqlCommand("selectcount(*) from login where userName='" + userName + "' anduserPwd='" + userPwd + "'", con);  
  14.         int count = Convert.ToInt32(cmd.ExecuteScalar());  
  15.         if (count > 0)  
  16.         {  
  17.             Response.Redirect("main.aspx");  
  18.    
  19.         }  
  20.      }</span>  


结果:

       当我们进入登陆界面时,用户名和密码的内容的确清空,但是当我们确不能登陆成功。

原因:

        当执行btn_Login事件时同时会执行Page_Load事件,并且Page_Load的执行顺序先于btn_Login的执行顺序。所以当我们单击登陆按钮时,它会先执行Page_Load事件,文本框的内容就会清空,在btn_Login事件中获取到的内容不是我们在界面输入的值,而是空值,所以,不能登陆。

Page_Load事件的特性:

       无论页面的其它任何事件执行时都会先执行Page_Load事件。

       因此,当加载页面并对控件的更改属性进行处理之前,应该先在Page_Load事件中检查该页面是否为被传递回的页面,即要进行IsPostBack的属性的判断。

      Ispostback:就是判断页面是首次加载的,还是数据回发(有get或者post请求过的)后的页面。对于首次加载的页面,IsPostBack的值为false,其它时候加载的页面都是回发页面,IsPostBack的值为true。

[vb]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. <span style="font-size:18px;">privatevoid Page_Load(object sender, EventArgs e)  
  2.     {  
  3.         if (!Page.IsPostBack )  
  4.         {  
  5.             this.txtUserName.Text = "";  
  6.             this.txtUserPwd.Text = "";  
  7.         }  
  8.     }  
  9.  </span>  

这样,每次进行一下判断,可以给我们省去好多麻烦。


有关if (!IsPostBack): 
       经常有人忘记写if (!IsPostBack)结果导致提交后取不到用户所选择的列表的值,因为Page_Load先执行,控件被重新初始化了。 
  
       所以,如果你是通过服务器控件触发事件来进行数据库更新的话,在你的page_load事件中把所有程序放在if (!IsPostBack)里面,否则你会发现显示的总是第一次载入的值。 
  
       一个页面第一次显示的时候IsPostBack=false,然后你在这个页面上点击按钮或其它东西提交的时候,IsPostBack=true。 
  
       if(!IsPostBack),获取一个值,该值指示该页是否正为响应客户端回发而加载,或者它是否正被首次加载和访问。 
  
       IsPostBack 由于用户交互(page.submit())提交页面而产生的加载,二次加载。第一次加载页面时,Page.ispostback是false,当触发该 页面的web控件时,产生回发,这时候该属性会是true,所以要用if(!IsPostback)来判断,只在第一次进入页面时加载数据。 
  
       Details: 
  
(1)if (!IsPostBack) 里面的代码只执行一遍,即页面第一次加载时。 
(2)以后页面重新刷新时,if (!IsPostBack)里面的语句不执行。 

Details第二条说法有误: 
当页面首次加载时IsPostback=false 下面要分情况了: 
①没有点击页面任何回发请求的按钮或事件(如设置为autopostback=true的
dropdownlist的selectedIndexChange事件),刷新页面,此时IsPostBack=false依然成立 
②如果出发①中所述事件后再次刷新页面,此时IsPostBack=true 楼主可以验证一下
(3)首次建立页面 IsPostBack为false,用来控制里边的语句只执行一次。 
(4)在对控件进行数据绑定时是必须加上的,因为如果不加的话,每一次响应客户端回发时,总是要执行一次Page_Load(),接着又要执行数据绑定的语句了,如此你不能选择数据了。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值