您的位置:首页 > 编程语言 > ASP

IsPostBack in ASP.NET, Programming with DataBind

2009-08-25 09:32 639 查看
唉,现在才发现,原来在ASP.NET中IsPostBack属性是多么的重要......
  一般是在page_load中检查是否是第一次加载本页或是判断是否是用户提交(PostBack)
  if (!IsPostBack) {
  //do something
  }
  在用DataGrid访问和更新数据库时没有注意到这个问题,会出现各种各样的奇怪问题,比如:

  问题描述:
   用DataGrid访问和更新数据库(SQL Server --Northwind --table name:categories --Query :select categoryID,categoryName,Description form categories ),除了更新操作以外,其它功能OK.对DataGrid进行如下操作:点击“编辑”,相应的行数据变为可编辑,同时编辑按钮被“更新”和“取消”代替。对数据进行编辑,如把Description中的AAA改为BBB。再点“更新”按钮。本意是想用此方法将修改后的数据(BBB)代替数据库中原有的AAA,当然是用Update方法了。但在点“更新”后,数据没有改变,我做过测试,UPDATE方法是有效的,也就是说,UPDATE方法更新的不是新数据,而是没有修改前的旧数据,造成数据没有更新(实际上是更新了)。要注意的是我的Page_Load事件如下
  private void Page_Load(object sender, System.EventArgs e)
   {
   // 在此处放置用户代码以初始化页面
   OleAd.Fill(ds);//OleAd--oledbAdapter
   dg.DataBind();//dg--DataGrid
   }
  分析问题(个人推测,请指正):
   由于没有用IsPostBack判断是否是第一次加载此页面,所以不管什么情况下只要有PostBack,都会对dg(DataGrid)进行数据绑定。所以在进行任何的sumbit后,dg都会去数据库绑定数据而不理会页面中的数据。
   当对选中的数据进行修改完毕后,在点“更新”时,提交此页面修改的数据,而马上遇到Page_Load事件,不等对修改数据进行处理,服务器就先生成原页面(MS用这种方法提高速度?),发现dg.DataBind(),执行之,于是放弃数据库更新,于是看不到更新结果了。
  解决问题:
   解决倒是很简单,Page_Load事件中加上对IsPostBack的判断就可以了。
  private void Page_Load(object sender, System.EventArgs e)
   {
   // 在此处放置用户代码以初始化页面
   OleAd.Fill(ds);//OleAd--oledbAdapter
   if(!IsPostBack)
  {
   dg.DataBind();//dg--DataGrid
  }
   }

isPostBack用法:

对于下拉菜单里的数据只需第一次加载页面程序时绑定就可以。象上边的例子写在If(!IsPostBack)代码块外边,这样,每次服务器响应客户端回发时都会重新绑定数据源,因此也就会出现上边的错误结果。

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

“为相应客户端回发而加载”,注意,这里的客户端的回发是指服务器端响应客户端的回发,这也就决定了该属性是由服务器控件的事件所引起。 对于javascript客户端脚本代码,由于只是运行在客户端,从而执引发不了该属性的执行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: