8

我有一些控件继承自ASP.NET buttons并使用onserverclick.

如果用户单击两次,则该按钮会触发两个服务器端事件。我怎样才能防止这种情况?

我尝试通过javascriptthis.disabled='true'在点击后(在onclick属性中)进行设置,但这也阻止了第一次回发。

4

7 回答 7

14

请参阅此示例以禁用对回发的控制。它应该可以帮助您完成您想要实现的目标。

http://encosia.com/2007/04/17/disable-a-button-control-during-postback/

于 2008-09-08T19:06:11.300 回答
2

您不一定要在回发时显示禁用的按钮。您要确保他们不会意外提交两次。因此,由于服务器端操作而禁用或隐藏按钮已经为时已晚。至此,第二个请求已经在进行中。您需要使用 javascript 或确保您的服务器端代码不会运行两次。

于 2008-09-08T19:11:53.033 回答
2

对于 FormView-Template 中的更新面板和按钮,我使用以下方法:

<script type="text/javascript">
    // Using that prm reference, hook _initializeRequest
    Sys.WebForms.PageRequestManager.getInstance().add_initializeRequest(InitializeRequestBuchung);

    // Abfangen von Mehrfachklicks auf Buttons für asynchrone Postbacks im Updatepanel
    function InitializeRequestBuchung(sender, args) {
        var arrButtonIds = ["ButtonInsert", "ButtonUpdate"];

        // Get a reference to the PageRequestManager.
        var prm = Sys.WebForms.PageRequestManager.getInstance();
        if (prm.get_isInAsyncPostBack() & jQuery.inArray(args.get_postBackElement().id, arrButtonIds) > -1) {
            args.set_cancel(true);
        }
    }
</script>

如果当前异步回发仍处于活动状态,这将取消后续回发。完美运行。

于 2012-07-13T08:20:56.393 回答
1

几天前有人在这里的某个地方说过这个,我同意 - 使用 javascript 来简单地隐藏按钮而不是禁用它;您可以在其位置显示“微调器”图像,让用户知道发生了什么。

于 2008-09-08T19:05:13.767 回答
1

我所做的不是隐藏,而是使用 javascript 交换按钮。单击第一个按钮时显示另一个灰色图像。

于 2008-09-08T19:11:02.817 回答
1

将 Button 属性 UseSubmitBehavior 设置为 false。然后创建一个禁用按钮的 OnClientClick 函数。它看起来像这样:

<script type="text/javascript">
   function disableFunctn(button){
       button.disabled = true;
   }
</script>
<asp:Button ID="button1" UseSubmitBehavior="false" OnClientClick="disableFunctn(this);"/>

最快最便宜的方式:

<asp:Button ID="button1" UseSubmitBehavior="false" OnClientClick="this.disabled=true;"/>
于 2014-08-14T15:52:31.553 回答
0

您也可以尝试例如 btnSave.Enable = false; 当按钮被点击并且在 Click Event 例程中完成按钮处理之前。如果您需要重置它以使其启用,请使用单独的按钮重置按钮以供重用。

另一种方法是设置带有验证的按钮,以便询问用户是否要保存,它应该会弹出两次。

另一种方法是标记第一次出现,然后为第二次设置弹出窗口以验证第二次或后续使用。

于 2016-07-11T22:49:15.927 回答