简体   繁体   中英

How to disable postback on an asp Button (System.Web.UI.WebControls.Button)

I have an asp button. It's server-side so I can only show it for logged in users, but i want it to run a javascript function and it seems when it's runat="server" it always calls the postback event.

I also have a regular button ( <input... >) not running at server and it works fine...

How can I make this button only run the javascript and not postback?

完成后让您的 javascript 返回 false。

<asp:button runat="server".... OnClientClick="myfunction(); return false;" />
YourButton.Attributes.Add("onclick", "return false");

或者

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

You can use jquery click action and use the preventDefault() function to avoid postback

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


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

Consider this.

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

}
     </script>

The others are right that you need your callback to return false; however I'd like to add that doing it by setting the onclick is an ugly old way of doing things. I'd recommend reading about unobtrusive javascript . Using a library like jQuery could make your life easier, and the HTML less coupled to your javascript (and jQuery's supported by Microsoft now!)

ASP.NET always generate asp:Button as an input type=submit .
If you want a button which doesn't do a post, but need some control for the element on the server side, create a simple HTML input with attributes type=button and runat=server .

If you disable click actions doing OnClientClick=return false , it won't do anything on click, unless you create a function like:

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

另外对于接受的答案,您可以使用 UseSubmitBehavior="false" MSDN

In my case, I solved adding return in the onClientClick:

Code Behind

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

Design Surface

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

You don't say which version of the .NET framework you are using.

If you are using v2.0 or greater you could use the OnClientClick property to execute a Javascript function when the button's onclick event is raised.

All you have to do to prevent a server postback occuring is return false from the called JavaScript function.

With Validation

In this example I used two controls, ddl and txtbox , have a happy coding

 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>

you can use the code:

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

if nee submit

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

You can use JQuery for this

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

than in JQuery

$("#btnID").click(function(e){e.preventDefault();})

You just need to return false from the

 function jsFunction() { try { // Logic goes here return false; // true for postback and false for not postback } catch (e) { alert(e.message); return false; } }
 <asp:button runat="server" id="btnSubmit" OnClientClick="return jsFunction()" />

JavaScript function like below.

: Always use try-catch blocks and return false from catch block to prevent incorrect calculation in javaScript function. :始终使用 try-catch 块并从 catch 块返回 false 以防止 javaScript 函数中的错误计算。

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM