Дважды нажмите кнопку

Кажется, что иногда (но не всегда) мое событие нажатия кнопки запускается дважды. Тот факт, что это случается иногда, но не всегда, действительно меня озадачивает. Вот моя кнопка:

<button id="btnSave" onserverclick="btnAddUser_Click" name="btnSave" type="submit" style="font-size:11px;font-family:Verdana;font-weight:bold;" runat="server">Save</button>

Ответ 1

У меня была такая же проблема, и мне потребовалось некоторое время, чтобы понять это! Если вы добавите к вашей кнопке type = "button", это, похоже, устранит проблему.

Ответ 2

Я только что наткнулся на эту же проблему и хотел указать, что удаление "Handles btnSave.Click" из вашего события не позволит ему дважды вызываться. Например, используйте это в коде позади:

Protected Sub btnSave_OnClick(ByVal sender As Object, ByVal e As System.EventArgs)
    'Do Something
End Sub

Вместо этого:

Protected Sub _btnSave_OnClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnSave.Click
    'Do Something
End Sub

Ответ 3

Вместо этого используйте собственную кнопку ASP.NET.

<asp:Button id="btnSave" runat="server" OnClick="btnAddUser_Click"  
     style="font-size:11px;font-family:Verdana;font-weight:bold;" Text="Save" />

Ответ 4

Похож на проблему с подключением обработчиков событий. http://geekswithblogs.net/TimH/archive/2006/10/23/94874.aspx

Попробуйте, если вы можете просто обработать события в своем конце. Кроме того, проблема может быть связана с типом = "Отправить". Проверьте, не изменилась ли эта кнопка на кнопку только.

Ответ 5

Если вы используете код позади, не используйте OnClick в теге ASP, <button id="btnSave" name="btnSave" type="submit" style="font-size:11px;font-family:Verdana;font-weight:bold;" runat="server">Save</button>

Ответ 6

Одна из возможных причин:
Проверьте объявление своей кнопки в источнике .aspx. Если у вас есть 'runat=server' и onclick="button1_click", и у вас есть обработчик событий в вашем коде (т.е..aspx.vb), это приведет к тому, что событие будет запущено дважды. Вот пример в xxx.aspx:

<asp:Button id="button1" onclick="button1_Click" runat="server" Text="Click Me!"></asp:Button>

Это объявление должно быть:

<asp:Button id="button1" runat="server" Text="Click Me!"></asp:Button>

Удачи!

Ответ 7

Решение уже упоминалось в другом ответе. Используйте type = "button" вместо отправки

Вот пример кода

    <span class="input-group-btn">
      <button id="btnLoadCustomerFile" class="btn btn-default" type="button" runat="server" onserverclick="btnLoadCustomerFile_Click" >Load</button>
       </span>

И внутренний код для обработки по клику

 protected void btnLoadCustomerFile_Click(object sender,EventArgs e)
    {
        LoadCustomerFile();
      }

Ответ 8

Правильный способ (на странице веб-формы ASP.NET), как уже указывалось двумя другими участниками, заключается в добавлении к элементу атрибута type = "button" и ассоциировать a onserverclick обработчик делегата событий.

Например:

<button type="button" id="btnSave" runat="server" onserverclick="btnSave_ServerClick" class="btn btn-success btn-label">
    <i class="fa fa-save"></i>Save
</button>

Надеюсь, что это поможет.

Ответ 9

Думаю, я просто решил найти решение. Удалите name="btnSave" или измените его на "btnSave1". Он будет работать.

Ответ 10

У меня была такая же проблема, но совсем другая причина. Я устанавливаю свойство defaultbutton панели контейнера для кнопки, запускаемой дважды. После удаления свойства DefaultButton "из Asp: Panel проблема решена.

Ответ 11

Просто пришлось снова вернуться в старый школьный ASPX и обнаружил эту проблему.

Моя форма была настроена следующим образом.

<asp:UpdatePanel ID="login" runat="server" UpdateMode="Conditional">
    <ContentTemplate>
        <asp:Panel ID="forgotPassword" runat="server" DefaultButton="lbtnSendLoginDetails" Visible="False">
            <asp:LinkButton ID="lbtnSendLoginDetails" runat="server" >

Код был

Protected Sub lbtnSendLoginDetails_Click(sender As Object, e As EventArgs) Handles lbtnSendLoginDetails.Click

Ответ для меня заключался в том, чтобы удалить атрибут DefaultButton из Panel и добавить

TabIndex="4" 

в LinkButton.

Ответ 12

У меня была похожая проблема. Я использовал Я изменил это на не работал.

Но когда я изменил это на это сработало.

Спасибо Этот пост помог мне.

Ответ 13

В моем случае это происходит со мной, когда я использую Chrome, но не в Firefox

Ответ 14

Это потому, что тип кнопки - отправить. Вам нужно изменить его на кнопку, чтобы решить события кнопки, запускающиеся дважды. Обратитесь к этому блогу для дальнейшего объяснения.

https://mzulkamal.com/blog/asp-net-web-form-html-button-tag-fires-two-times-s

Ответ 15

Если вы используете asp.net, просто используйте asp: button..... его чистый и простой. Независимо от того, какое оправдание я читаю в сети, нет смысла, что обработчик на стороне сервера должен вызываться дважды. Когда я добавляю type = "button", проблема решена. Однако форма не отправляется, когда я нажимаю клавишу ввода. Так что еще одна проблема должна быть решена. Использование кнопки asp: позаботится обо всем этом.