日期:2014-05-20  浏览次数:20417 次

ASP.NET问题求助~
本人刚开始学习ASP.NET,现在遇到一个小问题,请大家帮帮忙,谢谢。

我想只用一个页面实现一个简单的留言本功能
我采用的方法是:
创建一个default.aspx页面,在里面使用一个Repeater控件来负责读取数据库中的记录,然后在ItemTemplate里面,为每一条记录添加了一个“删除”按钮,然后通过该控件的ItemCommand事件,来处理各个记录的“删除”按钮的功能。

现在我遇到的问题是:
我在Page_Load事件中,让Repeater绑定数据源,然后当用户单击“删除”按钮激发ItemCommand事件后,能正常删除数据库中的记录,但是,由于是先绑定了Repeater,再删除的数据,所以这个时候,页面仍然会显示出已被删除的记录,必须重新打开这个页面才能看到更新后的数据。
后来,我又尝试在Page_LoadComplete事件再绑定数据源,结果,由于Page_LoadComplete事件发生在ItemCommand之后,因此在系统准备处理ItemCommand事件的时候,还没有绑定数据源,所以ItemCommand事件不会发生。

我目前想到的解决办法是:
1.在Page_Load事件中绑定数据源,以使ItemCommand能够正常工作,让ItemCommand删除指定的记录,然后再在Page_LoadComplete中重新读取数据库,重新为Repeater绑定数据。
2.在Page_Load事件中绑定数据源,以使ItemCommand能够正常工作,让ItemCommand删除指定的记录,然后重定向客户端浏览器,让它重新请求default.aspx页面。

以上两种方法,都会读两次数据库,我觉得影响效率。

请问,如何在只用一个aspx页面的情况下,完成我要求的功能,同时还要达到高效率呢?谢谢。

------解决方案--------------------
把读取数据库的代码写在单独的方法里,删除后再调用一次
------解决方案--------------------
用第1种方法
------解决方案--------------------
在page_load的not ispostback里调用一次数据访问类做初始化,绑定数据源
删除后,再调用一次重新绑定
------解决方案--------------------
first one
------解决方案--------------------
把读取数据库的代码写在单独的方法里,删除后再调用一次 ====== 同意这个.如果你只想连一次数据库,那么. 找到第一次查询出来的DataTable,然后将这一行数据删掉.
------解决方案--------------------
以上两种方法,都会读两次数据库,我觉得影响效率。
————————————————————————————————————————
如果要省,也应该省去第一次读取数据库,而不是第二次。在业务逻辑处理完,显示数据最新的数据必然要保证给用户一个可靠的结果,读取数据库是肯定要的。

至于第一次,从道理上讲,本来其实就不应该读取数据库,应该读取上一次页面状态。如果读出数据库记录,假设正好有一条记录被别的进程删除了,实际上你第一次绑定的记录在后边全乱了,asp.net给你填入的状态、客户端提交的值根本就是错误的。如果你想搞清楚,自己试试在编辑Datalist的时候手工把数据库中的记录删除,再填入几条别的记录,然后你在浏览器上提交编辑,看看是不是结果很可笑地。

看到这里的朋友都可以自己试试,在看看你所看到的所谓asp.net书籍以及网页上的相关程序有没有这么问题。由于读者没有经验,那些类似“hello world”一样的“标准”程序才能给你一些在几乎没有多用户、频繁修改的情况下似乎可行编程范例充斥版面。我们因此才会见到这么多悲哀的“两次读取数据库”逻辑。
------解决方案--------------------
有二种可以解决:
一\利用CSS,在删除数据后,更改该记录的CssClass.以区别其它数据.
二\在删除数据后,再重新加载数据,明显,这种没有第一种效率高,会加重服务器的负担.
------解决方案--------------------
//另外,小声问一下,“造黑星星”是什么意思??
作  者: duan517 (★★) Blog
括号里面两个黑色的星星