【发布时间】:2011-11-07 16:49:57
【问题描述】:
我们的 ASP.NET 页面上有一个带有一些数据的 GridView,其中一列有 CheckBoxes 以便选择行。 GridView 下方存在一个删除按钮。当最终用户通过 CheckBoxes 选择一些项目,然后单击 Delete 按钮时,将触发回发并删除所选项目。很普通的东西。
分配给我的问题也很常见。如果在结果页面上,最终用户单击浏览器后退按钮,则(在总是被立即忽略的警告之后)重新启动回发。
这里的问题是,由于所选项目已被删除,浏览器只需选择现在占据已删除项目所在空间的任何行,然后继续删除这些项目。这是一件坏事™。
到目前为止,我一直在尝试基于设置和检查会话变量来尝试跟踪是否发生回发,但我对结果不太满意。
有没有人有处理这个问题的好方法(希望是简单的)?
【问题讨论】:
-
这个页面是否使用Session来存储用户将要删除的选中项?或者,您是说,在发布已删除的项目后,浏览器正在(以某种方式)重新检查不再匹配相应项目的索引处的复选框?我不太清楚重新选中复选框的原因。
-
对不起,这个问题慢慢回复,因为有其他问题。没有会话值用于此。复选框被选中然后提交 - 标准的 asp.net 东西。所以在这种情况下,假设我有 5 行,检查前两行,然后提交。前两行被删除。剩余的行现在在网格中“向上移动”,所以以前的第 3-4 行现在是第 1-2 行。单击后退按钮,然后再次提交。表单值仍然表明应该删除第 1-2 行,所以它确实如此。现在只剩下 1 行(在本例中)。
-
那么,您通过
type="submit"按钮使用完整回发?可以贴一些相关的标记sn-ps和提交的C#/VB代码吗?