2011-04-09 88 views
2

我有一个ASP.NET 4.0 Web窗体。有一个我希望用户提交和检查的文本框。如果它是 是正确的,我会清空文本框,并且不希望用户能够重新提交该数据。在IE8中,用户可以回击(获得重新提交警告),如果刷新,它将重新提交该文本框中的数据。不允许重新提交页面

我已经尝试将值设置为null并禁用textbox的viewstate。

如何停止重新提交?

+0

你不能禁用按钮本身吗?或者,在最后一种情况下,作为不好推荐的解决方法,您可以在首次提交时添加视图状态并检查该状态。 – Andre 2011-04-09 21:12:09

+0

您无法停止重新提交,浏览器将执行浏览器要执行的操作。你可以检查提交,如果它是重复的,然后忽略它。可能你需要渲染一个隐藏的GUID或类似的东西来检查重复? – 2011-04-09 21:12:53

回答

1

我不认为对于后退按钮,你有任何选择,但要检查表单上的值再次提交,并确定如果它是重新提交的表单或不。 你有另一种选择,在提交后重定向到名为test.aspx的中间页面,该页面重定向到目标页面,因此在这种情况下,后退按钮将不起作用。

1

您可以使用AJAX发布文本框中的数据,由于您没有“返回”按钮,因此更好。

对于小东西(一个场,小信息)我用这一个:

$.post("savedata.aspx", { name: "John", time: "2pm" }); 

看看在others examples,它可能是有用的。

只记得在你的项目中引用jQuery

2

您可以实现在此处详细说明的邮件重定向获取模式Wikipedia以删除刷新和双重回发。

+0

无论如何你都应该这样做。使用历史记录时重新提交警告是非常不公平的。 – ysdx 2011-04-10 00:36:08

1

提交后,您可以保存表单已被提交到会话变量中的事实。当表单被提交时,你首先测试这个变量。如果这个变量是真的(或者你设定的那个),那么什么都不做。用户可以刷新并且不会重新提交。

2

如果绝对至关重要的是提交文件永远不会被处理两次,请结合上述所有内容。

  1. 放一些的onclick提交按钮的javascript禁用或隐藏它,按照安德烈的评论
  2. 实施后/重定向/获取按哈根达斯刘易斯的链接,以保证打在浏览器刷新不会重新提交形式
  3. 最后,根据Matt Greer和艾莉森的建议添加一个隐藏字段,会话变量等,所以如果某件事情通过了 - 例如连接在帖子和重定向之间超时,并且用户在浏览器上点击刷新 - 您不会在后端对其进行双重处理。