【问题标题】:Prevent from multiple form submitions without javascript防止在没有 javascript 的情况下提交多个表单
【发布时间】:2015-05-30 11:01:57
【问题描述】:

我有一个创建用户帐户的 Asp.net MVC 操作(在输入验证之后)。以及一个包含调用此操作的注册表单的视图。当操作验证输入时,用户留下 webbrowser 等待服务器响应并单击提交按钮几次。这会创建几个帐户。有没有办法防止用户在没有 javascript 的情况下重新提交表单。我不能在这个项目中使用 javascript,它是为非 javascript 浏览器设计的。或者你能建议(服务器)其他解决方案吗?

编辑:

  1. 此表单请求使用 POST 方法
  2. 不允许使用 JavaScript,因为此 Web 应用程序针对不支持 JavaScript 的残障人士的特殊 Web 浏览器

【问题讨论】:

  • 不使用 JS 的 Web 应用程序......听起来很奇怪......在 MVC 中也是如此。
  • 是获取还是发布请求?无论哪种方式,您都可以应用检查用户是否已经存在然后重定向他。
  • @Rajeev Kumar 有一些不支持 JavaScript 的残疾人专用网络浏览器。此 Web 应用程序是针对他们的。
  • 如果页面没有完成,浏览器会渲染页面吗?如果是,您可以使用验证码将用户重定向到新页面。它将输出一些带有文本的初始 HTML,例如“正在做一些工作......请稍候”。验证完成后 - 输出页面的其余部分:“工作完成。单击此处登录”。
  • 我很好奇:为什么残疾人使用的浏览器中不允许使用 JavaScript?

标签: c# html asp.net-mvc webpage


【解决方案1】:

你必须在服务器端处理这种情况,这是没有办法的。

我想到了 3 个选项:

  • 创建一个 cookie 并为每个提交检查它是否存在
  • 类似,但使用会话对象
  • 在创建新帐户之前,请始终检查用户是否存在于数据库中。无论如何,这应该是显而易见的!

【讨论】:

    【解决方案2】:

    您可以添加一个唯一的隐藏标记作为表单的一部分。该令牌也可以作为会话的一部分保存在服务器上。

    当用户在第一个操作上发布表单时,会验证令牌并设置一个标志以指示正在处理请求。处理的动作和呈现的结果。如果在等待结果时,用户尝试重新发布请求,令牌验证将失败,因为请求仍在处理中。

    在侧节点上,人们不断点击的主要原因是服务器是否收到请求没有反馈。为此,最好将用户重定向到显示正在处理请求的临时页面。结合上面可以用来显示请求进度,完成后重定向到相应的页面。

    当然,您还应该考虑简化流程。因此,系统可以快速响应输入,而不是让用户等待。

    【讨论】:

      【解决方案3】:

      是否需要使用 MVC?我认为您可以使用 WebForms 完成类似的事情。当用户提交请求时,您可以在后面的代码中禁用提交按钮,如下所示:

      btnSubmit.Enabled = false;
      

      但如果 MVC 是必须的,@walther 的答案将是正确的

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-11-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-18
        • 2012-04-25
        • 2011-12-04
        相关资源
        最近更新 更多