【问题标题】:How to disable postback on an asp Button (System.Web.UI.WebControls.Button)如何在 asp 按钮上禁用回发 (System.Web.UI.WebControls.Button)
【发布时间】:2010-10-15 14:05:12
【问题描述】:

我有一个 asp 按钮。它是服务器端的,所以我只能为登录的用户显示它,但我希望它运行一个 javascript 函数,它似乎在 runat="server" 时总是调用回发事件。

我还有一个常规按钮 (<input...>) 没有在服务器上运行,它工作正常...

我怎样才能让这个按钮只运行javascript而不是回发?

【问题讨论】:

    标签: .net asp.net javascript ajax


    【解决方案1】:

    完成后让您的 javascript 返回 false。

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

    【讨论】:

    • 在许多情况下,人们使用 onclick 或 OnClientClick 的语法 其中 myFunction() 返回 false 并且这还不够 - 你必须使用OnClientClick="return myFunction()"
    • 我必须添加 UseSubmitBehavior="False" 以及 ;return false
    • 一定要加上'CausesValidation="false"',否则会加上'WebForm_DoPostBackWithOptions'和一堆额外的标记。
    • 这在 ASP.NET 4+ 中对我不起作用,但是康斯坦丁对 OnClientClick="return false" 的回答确实有效。
    【解决方案2】:
    YourButton.Attributes.Add("onclick", "return false");
    

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

    【讨论】:

      【解决方案3】:

      您可以使用 jquery 点击操作并使用 preventDefault() 函数来避免回发

      <asp:button ID="btnMyButton" runat="server" Text="MyButton" />
      
      
      $("#btnMyButton").click(function (e) {
      // some actions here
       e.preventDefault();
      }
      

      【讨论】:

      • 这是一个优雅的答案,因为它允许您测试禁用条件。
      • 永远不要使用 preventDefault ,因为它会阻止其他依赖此事件的事件 -1
      • @ppumkin: preventDefault 是告诉其他事件侦听器您已处理此事件的好方法,因此他们不必这样做。我认为您的意思是 stopPropagation,它确实阻止了该事件甚至被其他事件侦听器听到。
      • 是啊啊啊啊啊。不。 4 年后,我现在更加支持这一点。只是不要这样做。
      【解决方案4】:

      考虑一下。

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

      【讨论】:

        【解决方案5】:

        其他人是正确的,您需要回调返回 false;但是我想补充一点,通过设置 onclick 来做到这一点是一种丑陋的旧方式。我建议阅读unobtrusive javascript。使用像 jQuery 这样的库可以让您的生活更轻松,并且 HTML 与您的 javascript 的耦合更少(现在还有 jQuery 的 supported by Microsoft!)

        【讨论】:

          【解决方案6】:

          ASP.NET 总是将asp:Button 生成为input type=submit
          如果您想要一个不发布帖子但需要对服务器端元素进行一些控制的按钮,请创建一个简单的 HTML 输入,其属性为 type=buttonrunat=server

          如果您禁用OnClientClick=return false 的点击操作,它不会在点击时执行任何操作,除非您创建如下函数:

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

          【讨论】:

            【解决方案7】:

            您没有说您使用的是哪个版本的 .NET 框架。

            如果您使用的是 v2.0 或更高版本,则可以在引发按钮的 onclick 事件时使用 OnClientClick 属性执行 Javascript 函数。

            为了防止发生服务器回发,您只需从调用的 JavaScript 函数返回 false

            【讨论】:

              【解决方案8】:

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

              【讨论】:

              • ASP.NET 将 ;__doPostBack( 添加到客户端点击脚本的末尾。
              【解决方案9】:

              就我而言,我解决了在 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 方法。
              【解决方案10】:

              你可以使用代码:

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

              【讨论】:

                【解决方案11】:

                有验证

                在这个例子中我使用了两个控件,ddltxtbox,祝你编码愉快

                 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>
                

                【讨论】:

                  【解决方案12】:

                  您可以为此使用 JQuery

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

                  比在 JQuery 中

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

                  【讨论】:

                    【解决方案13】:

                    你只需要从

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

                    JavaScript 函数如下。

                    注意*:始终使用 try-catch 块并从 catch 块中返回 false,以防止 javaScript 函数中的错误计算。

                    【讨论】:

                      猜你喜欢
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2012-03-29
                      • 2012-05-26
                      • 2011-10-23
                      • 2012-02-11
                      • 2014-01-03
                      • 1970-01-01
                      相关资源
                      最近更新 更多