防止在ASP.NET中提交多个表单

时间:2012-03-09 10:36:24

标签: c# asp.net asynchronous updatepanel postback

我目前正在寻找一种方法来阻止ASP.NET中的多个表单提交(即用户多次点击提交按钮,导致OnClick-Event也会多次触发)。

目前,我这样做:

    protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);
        Page.ClientScript.RegisterOnSubmitStatement(GetType(), "ServerForm",
        "if (this.submitted) return false; this.submitted = true; return true;");
    }

这类似于同步回发的魅力 - 每次回发后都会重置“提交”值,并阻止在同一次运行中多次提交表单 - 但是,此方法不适用于AsyncPostbacks,即UpdatePanel,所以现在我正在寻找一个想法来实现这一点,而不必在点击按钮后通过JS禁用和启用每个按钮。

谢谢,

丹尼斯

4 个答案:

答案 0 :(得分:4)

您可以在javascript中使用Page.get_isInAsyncPostBack()来检查异步请求的状态。

请参阅此链接以获取更多信息: http://ranaictiu-technicalblog.blogspot.com/2009/03/prevent-concurrent-asynchronous.html

答案 1 :(得分:1)

为什么不检查数据库?如果用户已经注册,则给出一个警告框。 你也可以查看PRG pattern

Handling Form submission with PRG

答案 2 :(得分:0)

答案 3 :(得分:0)

  1. 你可以检查一下开始&结束类Sys.WebForms.PageRequestManager中的方法以检查ASync请求。
  2. Sys.WebForms.PageRequestManager您可以修改以上示例中的代码&使用简单的javascript(如

    )禁用该按钮

    document.getElementById("YouButton.ClientID").disabled = true;