【问题标题】:ASP.net Web App undo supportASP.net Web App 撤消支持
【发布时间】:2010-09-14 16:25:40
【问题描述】:
我有一个简单的网络表单,上面有几个字段和一个网格视图。我还有一个保存和取消按钮。
我想要一种方法来撤消当用户按下取消时对表单上的数据所做的操作。这对字段来说很简单,但是由于对 gridview 的更改是针对数据库实时发生的,所以我不知道如何获得撤消功能。
我曾考虑在视图状态中存储对 gridview 的更改,但我宁愿不这样做,因为需要额外的空间。
我还想到了一个临时表来存储更改,然后根据需要回滚。
有人知道如何从表单中获取撤消功能吗?
【问题讨论】:
标签:
c#
asp.net
web-applications
undo
【解决方案1】:
一种方法是将对表的更改连同时间戳和该应用程序实例的标识符一起存储在另一个表中。如果您想撤消自特定时间以来的更改,您只需向后遍历列表直到该标识符的该日期。
【解决方案2】:
将所有数据保存在会话对象中,并在准备好时将其写入数据库。如果您抽象数据层,您可以使用与会话对象交互的 ObjectDataSource。
我目前在电子商务网站的结帐系统上使用此方法。我将数据存储在模仿数据库模式的自定义对象中。
【解决方案3】:
最简单的解决方案是在用户单击“保存”按钮之前不将gridview中的更改提交到数据库。
如果您决定使用视图状态或类似的方式来记录稍后将撤消的更改,请不要忘记采取与进行初始更改时相同的预防措施:更新冲突。
【解决方案4】:
嗯...将数据对象加载到会话中并从(MyObject)Session["MyObject"] 对象绑定您的控件。我相信您可以连接到 ObjectDataSource 以使用会话...然后您可以覆盖更新事件,以便将更改写入会话。
当用户点击保存时,获取会话对象并保存:MyObject obj = (MyObject)Session["MyObject"]; MyObject.Save()
它不会为您提供多个级别的撤消...虽然我猜您可以保存多个会话对象,如果您真的需要的话。