【问题标题】:Does ASP.NET Web Forms prevent a double click submission?ASP.NET Web 窗体是否会阻止双击提交?
【发布时间】:2012-07-22 16:42:48
【问题描述】:

我正在开发一个 ASP.NET 4.0 Web 窗体项目,在中断了大约 5 年之后,我对提交行为感到困惑。

在按钮的点击事件中,我让线程休眠,这样我可以多次点击提交按钮。

据我所知,ASP.NET 阻止了点击事件被多次调用。这是真的吗?

顺便说一句:我已经为这个测试关闭了 javascript。

【问题讨论】:

标签: asp.net webforms form-submit double-submit-prevention


【解决方案1】:

ASP.NET 阻止点击事件被多次调用。这是真的吗?

,实际上发生在您身上的是您的事件被会话锁定所阻止。 (What session is on asp.net,是 asp.net 上的一个模块,可以为每个访问该站点的用户保存数据)

因此,当您进行提交时,页面正在运行此提交,然后您在第一个重播之前进行第二个,实际上第二个正在等待第一个完成并解锁会话。

要进行测试并证明会话锁定了您的请求,请关闭会话并重试测试。

亲戚:
Web app blocked while processing another web app on sharing same session
What perfmon counters are useful for identifying ASP.NET bottlenecks?
Replacing ASP.Net's session entirely
Trying to make Web Method Asynchronous

【讨论】:

  • 我已经进行了测试,结果如您所说 - 当会话被禁用时,我会多次点击该事件。启用会话后,如果事件被阻止,看起来后续请求会被抛出,而不是排队。由此,我假设如果我为页面启用了 Session,我不必担心重复提交 - 只要我说,在响应之前禁用按钮。这是正确的吗?
  • @Jules 好,我很高兴我理解了真正的问题:)
  • @Jules 是的,该会话有助于解决许多类似的同步问题。我创建了一个不锁定任何东西的自定义会话,并且我锁定了我的左侧问题,就像这个问题一样。这是好的部分,坏的部分是锁定所有请求,这使得请求没有相对性来阻止另一个......至少在您启动网站的头几个月让生活变得最轻松。
【解决方案2】:

不,当您让主线程休眠时,它会导致会话被阻塞,从而阻止它处理任何进一步的请求。因此,它产生了这种效果。如果您有一个独立的任务可以在没有 Web 请求和响应的情况下完成,那么您可以在单独的线程中执行它。这不会阻止您的进程。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-19
    • 1970-01-01
    • 2011-05-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多