Многократная проблема с нажатием кнопки? - PullRequest
1 голос
/ 19 октября 2010

У меня есть форма, которая вставляет данные в БД при нажатии кнопки «Отправить», но проблема в том, что когда клиент нажимает кнопку несколько раз, он отправляет несколько запросов на создание, что означает несколько событий нажатия кнопки для одного и того же времени одних и тех же данных, чего не должно быть.

Я пытался отключить кнопку, когда клиент нажимает кнопку «Отправить» в первый раз, но после этого он не вызывает обработчик события щелчка на сервере или не запускает событие щелчка на сервере после его отключения.

Как решить эту проблему с несколькими щелчками ..

Я использовал следующий код для отключения кнопки

 <script type="text/javascript">
     function checkAuth(obj)
     {
         if(Page_ClientValidate("ValidationGroupName"))
            obj.disabled=true;      
     }
 </script>

        <asp:Button ID="btnSubmit" runat="server" Text="Submit" 
OnClick="btnSubmit_click" OnClientClick="checkAuth(this)" CssClass="FormButton" 
ValidationGroup="ValidationGroupName" />

Ответы [ 3 ]

5 голосов
/ 20 октября 2010

Не отключайте кнопку, просто предотвратите повторную отправку.

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

var formhandler = function() {
   var submit, isSubmit = false;
   submit = function(){
                // flop and return false once by the use of operator order.
    return isSubmit != (isSubmit = true);
    };
    return {
       submit: submit
    };
}(); // <-- use direct invcation to keep the internal variables "static"

прикрепить его по:

   document.forms[0].onsubmit = formhandler.submit;    

или

   OnClientClick = "formhandler.submit()";
1 голос
/ 19 октября 2010

Включить уникальный идентификатор в поле <input type="hidden">.Затем на сервере проверьте, был ли запрос уже обработан.

В качестве идентификатора вы можете сгенерировать GUID.Тогда вам просто нужна некоторая структура для сбора действительных идентификаторов.Например, словарь.Затем время от времени вы можете удалять старые идентификаторы из структуры и, конечно, удалять их при использовании.

0 голосов
/ 19 октября 2010

Все, что вам нужно сделать, это иметь некоторый клиентский JavaScript, который отключает кнопку. Нечто похожее на:

document.myform.mybutton.disabled  = true;

Если вы заключите это в функцию, и установите атрибут onClientClick вашей кнопки для его запуска. Как только он нажимается, он отключается, но все равно генерирует запрос к серверу.

Причина, по которой событие не сработало так, как вы предложили выше, скорее всего, потому что вы отключили серверную часть (а не клиентскую, как здесь)

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