ASP.NET: обработчик события OnServerClick не вызывается при использовании onclick - PullRequest
8 голосов
/ 07 августа 2009

У меня здесь особая проблема, и я не могу понять, каково ее решение. Обратите внимание, что следующий код не создается динамически, а просто сразу в моем файле aspx.

<button type="button" runat="server" id="btnSubmit"
  OnServerClick="btnSubmit_Click" onclick="return confirm('Sure?');">
    Submit
</button>

Это работает просто отлично, если у меня нет атрибута onclick, то есть обработчик OnServerClick запускается, как и должно. Но когда я использую атрибут onclick, это не так, независимо от того, подтверждаю я или отклоняю диалоговое окно подтверждения.

Что я делаю не так? Спасибо

Ответы [ 8 ]

15 голосов
/ 07 августа 2009

Если вы посмотрите на сгенерированный исходный код, вы увидите следующее:

onclick="return confirm('Sure?'); __doPostBack('btnSubmit','')"

так, что происходит, _doPostBack никогда не вызывается. Хакерский способ сделать то, что вы ищете, следующий:

<button type="button" runat="server" id="btnSubmit"
  OnServerClick="btnSubmit_Click" onclick="if (confirm('Sure?')) ">

Правильно было бы использовать веб-элемент управления:

<asp:Button runat="server"
        OnClick="btnSubmit_Click" OnClientClick="return confirm('Sure?')" Text="Submit" />
3 голосов
/ 18 января 2010

У меня было больше успеха с

<asp:Button ID="btnSubmit" runat="server" Text="Save" UseSubmitBehaviour="false"
OnClick="btnSubmit_Click" OnClientClick="if (!confirm('Sure?')) return" />
2 голосов
/ 18 апреля 2014

Принятый ответ не идеален. Если вы не используете type="button", веб-страница выполнит обратную передачу, даже если вы нажали кнопку Отмена. Правильный и простой способ - воспользоваться оценкой короткого замыкания и сделать это взломать: заменить ; на && !, как показано ниже.

<button runat="server" id="btnSubmit"
        OnServerClick="btnSubmit_Click" onclick="return confirm('Sure?') && !">

Вывод будет выглядеть так:

<button id="btnSubmit"
        onclick="return confirm('Sure?') && ! __doPostBack('btnSubmit','')">

Это дает правильное возвращаемое значение, потому что true && !undefined вернет true и undefined будет оценено, а false && !undefined вернет false и undefined НЕ будет оценено, что именно то, что мы хотим. *

1 голос
/ 20 октября 2015

Попробуйте это:

<button type="button" runat="server" id="btnSubmit"
OnServerClick="btnSubmit_Click" onclick="if(!confirm('Sure?')) return;">
Submit
</button>
1 голос
/ 07 августа 2009

Как насчет типа кнопки чейджинга для отправки, она хорошо работает:

<button type="submit" runat="server" id="btnSubmit"
  OnServerClick="btnSubmit_Click" onclick="return confirm('Sure?');">
    Submit
</button>
1 голос
/ 07 августа 2009

Звучит так, будто событие onclick не всплывает.

Вы должны просто иметь возможность использовать

OnClientClick="return confirm('Sure?');

Я не думаю, что другой onClick должен быть необходим.

Редактировать:

Этот метод потребует от вас привязки вашей функции к событию OnClick вручную.


Сегодня утром я придумываю атрибуты, поэтому в тщетных попытках выкупить себя…

Другой способ - вставить javascript, чтобы перехватить событие. Нечто подобное ..

$("form").submit(function() {

        var resp = confirm("Save & Submit?");
        if (resp) {
            serializeStats();
            return true;
        }
        else {
            return false;
        }

    });

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

0 голосов
/ 25 июля 2018

Front Site

  <button  id="submit1" runat="server"  
              onclick="if(confirm('Sure?')) { } else{ return false} ;"    
              onserverclick="submit_ServerClick"  >save</button>

Back Site

protected void submit_ServerClick(object sender, EventArgs e)
{
}
0 голосов
/ 07 августа 2009

- это WebControl, который выполняет то же самое с событием OnClick на стороне сервера и OnClientClick для стороны клиента.

Я думаю, что вы получаете поведение, которое видите, потому что ваше подтверждение ('уверен?') Возвращает false, что останавливает механизм обратной передачи. Это объясняет, почему это работает, когда у вас нет щелчка мышью.

...