首页 > 编程 > .NET > 正文

不该错的问题:IsPostBack in ASP.NET, Programming with Dat

2024-07-10 13:07:37
字体:
来源:转载
供稿:网友

唉,现在才发现,原来在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
}
}

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表