Як відключити постбекшн на кнопці asp


135

У мене є кнопка підсилки. Це на стороні сервера, тому я можу показувати його лише для зареєстрованих користувачів, але я хочу, щоб він виконував функцію javascript і, здається, коли це runat = "сервер", він завжди викликає подію postbackback.

У мене також звичайна кнопка ( <input...>) не працює на сервері, і вона працює чудово ...

Як я можу зробити так, щоб ця кнопка запускала лише javascript, а не postbackback?

Відповіді:


263

Нехай ваш JavaScript поверне помилковим, коли це буде зроблено.

<asp:button runat="server".... OnClientClick="myfunction(); return false;" />

16
У багатьох випадках люди використовують onclick або OnClientClick із цим синтаксисом <asp: Button OnClientClick = "myFunction ()" /> де myFunction () повертає помилки, а цього недостатньо - вам потрібно використовувати OnClientClick = "повернути myFunction ()"
Брон Девіс

17
Мені довелося додати UseSubmitBehavior = "False", а також; return false
граб

9
Не забудьте додати "CausesValidation =" false "', інакше це додасть" WebForm_DoPostBackWithOptions "та купу додаткової розмітки.
Картер Медлін

Це не спрацювало для мене в ASP.NET 4+, однак відповідь Костянтина просто OnClientClick="return false"подіяла.
TylerH


15

Ви можете використовувати дію клацання jquery і використовувати функцію prevenDefault (), щоб уникнути поштового зворотного зв'язку

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


$("#btnMyButton").click(function (e) {
// some actions here
 e.preventDefault();
}

Це елегантна відповідь, тому що вона дозволяє перевірити на умови відключення.
Джон Мотт

1
Ніколи не використовуйте prevenDefault, оскільки це зупинить інші події, які покладаються на цю подію -1
Пьотр Кула

1
@ppumkin: prevenDefault - це прекрасний спосіб сказати іншим слухачам подій, що ви обробляли цю подію, щоб вони не мали цього робити. Я думаю, що ви мали на увазі stopPropagation, який справді перешкоджає події навіть почути інших слухачів подій.
Себас

Йеаааааааа. немає. 4 роки потому, і я стою за цим ще більше зараз. Просто не роби нічого з цього.
Пьотр Кула

8

Розглянемо це.

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

}
     </script>

6

Інші вірні, що вам потрібен зворотний дзвінок, щоб повернути помилкове; однак я хотів би додати, що робити це за допомогою встановлення onclick - це некрасивий старий спосіб робити речі. Я рекомендую прочитати про ненав’язливий JavaScript . Використання бібліотеки на зразок jQuery може полегшити ваше життя, а HTML менше зв'язаний з вашим javascript (а Microsoft підтримує jQuery зараз!)


4

ASP.NET завжди генерується asp:Buttonяк input type=submit.
Якщо ви хочете кнопку, яка не займає публікацію, але потребує деякого контролю над елементом на стороні сервера, створіть простий HTML-введення з атрибутами type=buttonта runat=server.

Якщо ви відключите дії кліків OnClientClick=return false, це не призведе до нічого, якщо ви не створите функцію, наприклад:

function btnClick() {
    // do stuff
    return false;
}

3

Ви не кажете, яку версію фреймворку .NET ви використовуєте.

Якщо ви використовуєте v2.0 або новішу версію, ви можете використовувати властивість OnClientClick для виконання функції Javascript, коли подія onclick кнопки піднята.

Все, що вам потрібно зробити, щоб запобігти появі зворотного зв'язку сервера - це повернення falseз викликаної функції JavaScript.


3

додатково для прийнятої відповіді ви можете використовувати UseSubmitBehavior = "помилковий" MSDN


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>

2

Ви можете використовувати JQuery для цього

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

ніж у JQuery

$("#btnID").click(function(e){e.preventDefault();})
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.