2009-08-07 5 views
8

У меня есть своеобразная проблема, и я не могу по жизни выяснить, что это за решение. Обратите внимание, что следующий код: не динамически созданный, но сразу же в моем aspx файле.ASP.NET: обработчик события OnServerClick не вызывается при использовании onclick

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

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

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

ответ

15

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

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

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

<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" /> 
+0

Да, я видел это в Firebug, но я решил, что это в основном означает, что я «Doing It Wrong». Я попытался поэкспериментировать с 'onclick =", если (confirm ('Sure?')) Return; "', но с этим больше не было вызова '__doPostBack'! :( –

+1

Причина, по которой не используется '', заключается в том, что она использует 'INPUT', в то время как мне нужен тег' BUTTON' для упрощения стилизации CSS. Причина необходимости использования 'BUTTON' не отражается в вопрос, просто доверь мне. :) –

+0

В таком случае вам может быть интересно: http://stackoverflow.com/questions/187482/how-can-i-use-the-button-tag-with-asp- net –

1

Похоже, что событие onclick не кипит.

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

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

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

Edit:

Этот метод может потребовать от вас, чтобы подключить вашу функцию к событию OnClick вручную.


творю вверх атрибуты утром так в тщетной попытке искупить myself-

Другой метод будет вставить JavaScript, чтобы поймать событие. Что-то вроде ..

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

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

    }); 

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

+3

Контроль HtmlButton не имеет свойство OnClientClick. –

+3

Это происходит, когда у вас недостаточно кофе! –

+1

0

< кнопку> является элементом управления HtmlButton где OnServerClick является единственным событием клика на стороне сервера. OnClick не распознается ASP.NET, поэтому он передается клиенту без изменений, если вы хотите, чтобы какой-либо код javascript на стороне клиента выполнялся до обратной передачи.

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

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

1

Как насчет chaging типа кнопки, чтобы представить, он хорошо работает:

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

Пробовал это, но тогда он просто отправил 'form', который обертывает мой HTML-контент, который не то, чего я пытаюсь достичь. –

+1

Ваша форма будет отправлена ​​в любом случае - так запущен серверный onclick – n8wrl

3

Я имел больше успеха с

<asp:Button ID="btnSubmit" runat="server" Text="Save" UseSubmitBehaviour="false" 
OnClick="btnSubmit_Click" OnClientClick="if (!confirm('Sure?')) return" /> 
2

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

<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

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

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

Добро пожаловать в Stack Overflow. Пожалуйста, всегда объясняйте, почему и как работает ваш ответ. –

 Смежные вопросы

  • Нет связанных вопросов^_^