【问题标题】:Not allow resubmit of page不允许重新提交页面
【发布时间】:2011-08-02 05:59:24
【问题描述】:

我有一个 ASP.NET 4.0 Web 表单。我希望用户提交和检查一个文本框。如果它是 正确,我将文本框清空,并且不希望用户能够重新提交该数据。在 IE8 中,用户可以回击(收到重新提交警告),如果他们刷新,它将重新提交来自该文本框的数据。

我已尝试将值设置为 null 并禁用文本框的视图状态。

如何停止重新提交?

【问题讨论】:

  • 你不能禁用按钮本身吗?或者,在最后一种情况下,作为一个不推荐的解决方法,您可以在首次提交时添加一个视图状态并检查它
  • 你不能停止重新提交,浏览器会做浏览器会做的事情。您可以检查提交,如果它是重复的,则忽略它。可能您需要呈现隐藏的 GUID 或类似的东西来检查重复项?

标签: c# asp.net webforms postback submit


【解决方案1】:

您可以在Wikipedia 上实施详细的 Post Redirect Get 模式,以消除刷新和双重回发。

【讨论】:

  • 无论如何你都应该这样做。使用历史的时候重新提交警告很无聊。
【解决方案2】:

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

  1. 根据 Andre 的评论,在提交按钮上添加一些 onclick javascript 以禁用或隐藏它
  2. 按照 Daz Lewis 的链接实现 Post/Redirect/Get,以确保在浏览器上点击刷新不会重新提交表单
  3. 最后,按照 Matt Greer 和 Alison 的建议,添加一个隐藏字段、会话变量等,这样如果某些事情确实通过了 - 例如发布和重定向之间的连接超时,并且用户在浏览器上点击刷新 - 您不会在后端进行双重处理。

【讨论】:

    【解决方案3】:

    我认为对于“后退”按钮,您别无选择,只能再次检查表单提交的值,并确定它是否是重新提交的表单。 您还有另一种选择,即在提交后重定向到名为 test.aspx 的中间页面,该页面重定向到您的目标页面,因此在这种情况下,后退按钮将不起作用。

    【讨论】:

      【解决方案4】:

      您可以使用 AJAX 从文本框中发布数据,这样会更好,因为您不会有“返回”按钮。

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

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

      看看others examples,它可能有用。

      请记住在您的项目中引用jQuery

      【讨论】:

        【解决方案5】:

        提交时,您可以将表单已提交的事实保存在会话变量中。提交表单后,您首先测试此变量。如果变量为真(或您设置的任何值),则什么也不做。用户可以刷新,不会重新提交。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-07-12
          • 1970-01-01
          • 1970-01-01
          • 2017-02-03
          • 2011-06-18
          • 2013-11-19
          • 2014-04-06
          相关资源
          最近更新 更多