Cách tắt postback trên nút asp


135

Tôi có một nút asp. Đó là phía máy chủ vì vậy tôi chỉ có thể hiển thị nó cho người dùng đã đăng nhập, nhưng tôi muốn nó chạy một chức năng javascript và dường như khi runat = "server" nó luôn gọi sự kiện postback.

Tôi cũng có một nút thông thường ( <input...>) không chạy trên máy chủ và nó hoạt động tốt ...

Làm cách nào để tạo nút này chỉ chạy javascript và không postback?

Câu trả lời:


263

Có javascript của bạn trở lại sai khi nó hoàn thành.

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

16
Trong nhiều trường hợp, mọi người sử dụng một onclick hoặc OnClientClick với cú pháp này
Bron Davies

17
Tôi đã phải thêm UseSubmitBehavior = "Sai" cũng như; trả về false
cướp

9
Đảm bảo thêm 'CausesValidation = "false"', nếu không, nó sẽ thêm 'WebForm_DoPostBackWithOptions' và một loạt các đánh dấu bổ sung.
Carter Medlin

Điều này không làm việc cho tôi trong ASP.NET 4+, tuy nhiên câu trả lời của Konstantin chỉ đơn giản là OnClientClick="return false"đã làm việc.
TylerH

39
YourButton.Attributes.Add("onclick", "return false");

hoặc là

<asp:button runat="server" ... OnClientClick="return false" />

15

Bạn có thể sử dụng hành động nhấp chuột jquery và sử dụng hàm notifyDefault () để tránh gửi lại

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


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

Đây là một câu trả lời tao nhã vì nó cho phép bạn kiểm tra các điều kiện để vô hiệu hóa.
John Mott

1
Không bao giờ sử dụng ngăn chặn Lỗi vì nó sẽ dừng các sự kiện khác phụ thuộc vào sự kiện này -1
Piotr Kula

1
@ppumkin: notifyDefault là một cách tuyệt vời để nói với những người nghe sự kiện khác rằng bạn đã xử lý sự kiện này để họ không phải làm như vậy. Tôi nghĩ những gì bạn muốn nói là stopPropagation, điều này thực sự ngăn sự kiện thậm chí không được nghe bởi những người nghe sự kiện khác.
Sabbas

Yeaaaaaaaaaa. Không. 4 năm sau và tôi đứng đằng sau điều này thậm chí nhiều hơn bây giờ. Đừng làm điều đó.
Piotr Kula

8

Xem xét điều này.

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

}
     </script>

6

Những người khác nói đúng rằng bạn cần gọi lại để trả về false; tuy nhiên tôi muốn thêm rằng làm điều đó bằng cách đặt onclick là một cách làm cũ xấu xí. Tôi khuyên bạn nên đọc về javascript không phô trương . Sử dụng một thư viện như jQuery có thể giúp cuộc sống của bạn dễ dàng hơn và HTML ít được kết hợp với javascript của bạn (và jQuery được Microsoft hỗ trợ ngay bây giờ!)


4

ASP.NET luôn tạo asp:Buttonnhư một input type=submit.
Nếu bạn muốn một nút không thực hiện bài đăng, nhưng cần một số điều khiển cho phần tử ở phía máy chủ, hãy tạo một đầu vào HTML đơn giản với các thuộc tính type=buttonrunat=server.

Nếu bạn vô hiệu hóa các hành động nhấp chuột OnClientClick=return false, nó sẽ không làm gì khi nhấp, trừ khi bạn tạo một chức năng như:

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

3

Bạn không nói phiên bản .NET framework nào bạn đang sử dụng.

Nếu bạn đang sử dụng v2.0 trở lên, bạn có thể sử dụng thuộc tính OnClientClick để thực thi chức năng Javascript khi sự kiện onclick của nút được nêu ra.

Tất cả những gì bạn phải làm để ngăn chặn tình trạng gửi lại máy chủ xảy ra là trả về falsetừ hàm JavaScript được gọi.


3

bổ sung cho câu trả lời được chấp nhận, bạn có thể sử dụng UseSubmitBehavior = "false" MSDN


ASP.NET cho biết thêm; __doPostBack(đến cuối tập lệnh bấm của khách hàng.
IvanH

3

Trong trường hợp của tôi, tôi đã giải quyết thêm trả lại trong onClientClick:

Mã ẩn

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

Bề mặt thiết kế

<asp:Button runat="server" ID="send" Text="Send" onClientClick="return verify()" />

Làm thế nào để chạy OnClickphương thức sau này.
5377037

2

bạn có thể sử dụng mã:

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

nếu không nộp

...
<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

Có xác nhận

Trong ví dụ này, tôi đã sử dụng hai điều khiển ddltxtboxcó mã hóa hạnh phúc

 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

Bạn có thể sử dụng JQuery cho việc này

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

hơn trong JQuery

$("#btnID").click(function(e){e.preventDefault();})
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.