Как отключить обратную передачу на кнопку asp

135

У меня есть кнопка asp. Он на стороне сервера, поэтому я могу показать его только зарегистрированным пользователям, но я хочу, чтобы он запускал функцию javascript, и кажется, что когда он runat = "server", он всегда вызывает событие обратной передачи.

У меня также есть обычная кнопка ( <input...>) не работает на сервере, и она работает нормально ...

Как сделать так, чтобы эта кнопка запускала только JavaScript, а не постбэк?

dkarzon
источник

Ответы:

263

Пусть ваш javascript вернет false, когда это будет сделано.

<asp:button runat="server".... OnClientClick="myfunction(); return false;" />
WOMP
источник
16
Во многих случаях люди используют onclick или OnClientClick с этим синтаксисом <asp: Button OnClientClick = "myFunction ()" />, где myFunction () возвращает false, а этого недостаточно - вам нужно использовать OnClientClick = "return myFunction ()"
Брон Дэвис
17
Я должен был добавить UseSubmitBehavior = "False", а также; вернуть false
rob
9
Обязательно добавьте 'CausesValidation = "false", иначе он добавит "WebForm_DoPostBackWithOptions" и кучу дополнительной разметки.
Картер Медлин
Это не сработало для меня в ASP.NET 4+, однако ответ Константина просто OnClientClick="return false"сработал.
TylerH
39
YourButton.Attributes.Add("onclick", "return false");

или

<asp:button runat="server" ... OnClientClick="return false" />
Константин Таркус
источник
15

Вы можете использовать действие jquery click и использовать функцию protectDefault (), чтобы избежать обратной передачи.

<asp:button ID="btnMyButton" runat="server" Text="MyButton" />


$("#btnMyButton").click(function (e) {
// some actions here
 e.preventDefault();
}
Rameez
источник
Это элегантный ответ, потому что он позволяет вам проверять условия для отключения.
Джон Мотт
1
Никогда не используйте protectDefault, так как это остановит другие события, которые полагаются на это событие -1
Петр Кула
1
@ppumkin: warnDefault - отличный способ сообщить другим слушателям событий, что вы обработали это событие, чтобы им не пришлось это делать. Я думаю, что вы имели в виду stopPropagation, который действительно не дает событию быть услышанным другими слушателями событий.
Себбас
Yeaaaaaaaaaa. нет. 4 года спустя, и я поддерживаю это даже больше теперь. Просто не делай ничего из этого.
Петр Кула
8

Учти это.

<script type="text/javascript">
Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(BeginRequest);
function BeginRequest(sender, e) {
    e.get_postBackElement().disabled = true;

}
     </script>
Ramakrishnankt
источник
6

Другие правы, что вам нужен ваш обратный вызов, чтобы вернуть ложь; Тем не менее, я хотел бы добавить, что делать это, устанавливая onclick, - ужасно старый способ делать вещи. Я бы порекомендовал почитать про ненавязчивый javascript . Использование библиотеки, такой как jQuery, может упростить вашу жизнь, а HTML-код менее связан с вашим javascript (а jQuery теперь поддерживается Microsoft !)

Нил Уильямс
источник
4

ASP.NET всегда генерировать asp:Buttonкак input type=submit.
Если вам нужна кнопка, которая не выполняет публикацию, но нуждается в некотором контроле для элемента на стороне сервера, создайте простой ввод HTML с атрибутами type=buttonи runat=server.

Если вы отключите выполнение действий, связанных с щелчком OnClientClick=return false, оно ничего не будет делать при нажатии, если вы не создадите такую ​​функцию, как:

function btnClick() {
    // do stuff
    return false;
}
Аристидес Дарлан
источник
3

Вы не говорите, какую версию .NET Framework вы используете.

Если вы используете версию 2.0 или выше, вы можете использовать свойство OnClientClick для выполнения функции Javascript при возникновении события onclick кнопки.

Все, что вам нужно сделать, чтобы предотвратить возникновение обратной передачи на сервере, это возврат falseиз вызываемой функции JavaScript.

OtisAardvark
источник
3

дополнительно для принятого ответа вы можете использовать UseSubmitBehavior = "false" MSDN

Arbejdsglæde
источник
ASP.NET добавляет; __doPostBack(до конца кликайте скрипт клиента.
IvanH
3

В моем случае я решил добавить возврат в onClientClick:

Код позади

function verify(){
  if (document.getElementById("idName").checked == "") {
    alert("Fill the field");
    return false;
  }
}

Поверхность дизайна

<asp:Button runat="server" ID="send" Text="Send" onClientClick="return verify()" />
Рафаэль
источник
Как запустить OnClickметод после этого.
5377037
2

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

<asp:Button ID="Button2" runat="server"
     Text="Pulsa"
     OnClientClick="this.disabled=true"
     UseSubmitBehavior="False"/>

если нужно представить

...
<form id="form1" runat="server" onsubmit="deshabilita()">
...
<script type="text/javascript">
    function deshabilita()
    {
        var btn = "<%= Button1.ClientID %>";
        if (confirm("Confirme postback"))
        {
            document.getElementById(btn).disabled = true;
            return true;
        }
        return false;
    }
</script>

Эльвиа Сото
источник
2

С проверкой

В этом примере я использовал два элемента управления, ddlи txtbox, удачного кодирования

 asp:ScriptManager ID="script1" runat="server" /asp:ScriptManager

    asp:UpdatePanel ID="Panel1" runat="server"
       ContentTemplate

// ASP BUTTON
asp:Button ID="btnSave" runat="server" Text="Save" class="btn btn-success" OnClientClick="return Valid()" OnClick="btnSave_Click"


   /ContentTemplate    
    /asp:UpdatePanel    

  <script type="text/javascript">
        function Valid() {

            if ($("#ctl00_ContentPlaceHolder1_YOUR CONTROL NAME").val() == 0) {
                alert("Please select YOUR TEXT");
                $("#ctl00_ContentPlaceHolder1_YOUR CONTROL NAME").focus();
                return false;
            }

            if ($("#ctl00_ContentPlaceHolder1_YOUR CONTROL NAME").val().length == 0) {
                alert("Please Type YOUR TEXT");
                $("ctl00_ContentPlaceHolder1_YOUR CONTROL NAME").focus();
                return false;
            }
            return true;
        }
</script>
Praneeth
источник
2

Вы можете использовать JQuery для этого

<asp:Button runat="server" ID="btnID" />

чем в JQuery

$("#btnID").click(function(e){e.preventDefault();})
Викас
источник