我有一些继承自 ASP.NET 按钮并使用“onserverclick”的控件。

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

我尝试通过 JavaScript 在点击后设置“this.disabled='true'”(在“onclick”属性中),但这也会阻止第一次回发。

有帮助吗?

解决方案

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

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

其他提示

您不一定希望在回发时显示禁用的按钮。您要确保他们不会意外提交两次。因此,由于以下原因禁用或隐藏按钮 服务器端 游戏中的行动已经为时已晚。此时,第二个请求已经在路上。您需要使用 JavaScript 来执行此操作,或者确保您的服务器端代码不会运行两次。

如果 FormView 模板内有更新面板和按钮,我使用以下方法:

<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>

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

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

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

将按钮属性 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;"/>

您还可以尝试例如 btnSave.Enable = false;当按下按钮时以及在单击事件例程中完成按钮处理之前。如果您需要重置它以允许其启用,请使用一个单独的按钮来重置按钮以供重复使用。

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top