Предотвращение случайного двойного нажатия на кнопку - PullRequest
7 голосов
/ 08 сентября 2008

У меня есть несколько элементов управления, которые наследуются от кнопок ASP.NET и используют 'onserverclick'.

Если пользователь дважды щелкнет, кнопка запускает два события на стороне сервера. Как я могу предотвратить это?

Я попытался установить "this.disabled = 'true'" после клика (в атрибуте 'onclick') через javascript, но это также блокирует первую обратную передачу.

Ответы [ 7 ]

13 голосов
/ 08 сентября 2008

См. Этот пример для отключения контроля при обратной передаче. Это должно помочь вам сделать то, что вы пытаетесь достичь.

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

2 голосов
/ 13 июля 2012

В случае панели обновления и кнопки внутри 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>

Это отменяет следующий постбэк, если в данный момент асинхронный постбэк еще активен Работает отлично.

2 голосов
/ 08 сентября 2008

Не обязательно показывать отключенную кнопку при обратной передаче. Вы хотите убедиться, что они случайно не отправят дважды. Поэтому отключение или скрытие кнопки в результате действия на стороне сервера уже слишком поздно в игре. К этому моменту второй запрос уже в пути. Вам нужно либо сделать это с помощью JavaScript, либо убедиться, что ваш серверный код не будет выполняться дважды.

1 голос
/ 14 августа 2014

Установите для свойства 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;"/>
1 голос
/ 08 сентября 2008

Вместо того, чтобы прятаться, я переключал кнопки с помощью JavaScript. Покажите еще одно серое изображение по нажатию первой кнопки.

1 голос
/ 08 сентября 2008

Кто-то еще сказал это где-то здесь несколько дней назад, и я согласен - используйте javascript, чтобы просто скрыть кнопку вместо ее отключения; на его месте можно показать изображение «вертушки», которое позволит пользователю узнать, что происходит.

0 голосов
/ 12 июля 2016

Вы также можете попробовать, например, btnSave.Enable = false; когда нажата кнопка, и до того, как обработка кнопки будет выполнена в процедуре Click Event. Если вам нужно сбросить его, чтобы разрешить его включение, используйте отдельную кнопку, которая сбрасывает кнопку для повторного использования.

Другой способ - установить кнопку с проверкой, чтобы у пользователя спрашивали, хочет ли он сохранить, он должен всплывать оба раза.

Еще один метод - пометить первое вхождение, а затем установить всплывающее окно для второго, чтобы проверить второе или последующее использование.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...