【问题标题】:Disable the postback on an <ASP:LinkButton>禁用 <ASP:LinkBut​​ton> 上的回发
【发布时间】:2010-09-15 15:57:06
【问题描述】:

我的表单上有一个 ASP.NET 链接按钮控件。我想将它用于客户端的 javascript 并防止它回发到服务器。 (我想使用 linkbutton 控件,以便在某些情况下对它进行蒙皮和禁用它,因此不建议使用直接向上的标签)。

如何防止它回传到服务器?

【问题讨论】:

    标签: asp.net asplinkbutton


    【解决方案1】:

    ASPX 代码:

    <asp:LinkButton ID="someID" runat="server" Text="clicky"></asp:LinkButton>
    

    后面的代码:

    public partial class _Default : System.Web.UI.Page 
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            someID.Attributes.Add("onClick", "return false;");
        }
    }
    

    呈现为 HTML 的内容是:

    <a onclick="return false;" id="someID" href="javascript:__doPostBack('someID','')">clicky</a>
    

    在这种情况下,onclick 功能会成为您的验证器。如果为false,则不执行“href”链接;但是,如果它是真的 href 将被执行。这消除了您的回帖。

    【讨论】:

    • &lt;asp:LinkButton ID="LinkButton5" runat="server" OnClick="A_Click" CssClass="linkOff" Text="Edit"&gt;&lt;/asp:LinkButton&gt; 并添加上述内容,单击时没有任何反应:/
    • 完美,为此苦苦挣扎了一段时间,因为不想调用 __postback 而是调用一些 JS。非常感谢。
    【解决方案2】:

    这听起来可能是一个无益的答案......但是为什么您将 LinkBut​​ton 用于纯粹的客户端?使用标准 HTML 锚标记并将其 onclick 操作设置为您的 Javascript。

    如果您需要服务器生成该链接的文本,则使用asp:Label 作为锚点的开始和结束标记之间的内容。

    如果您需要根据服务器端代码动态更改脚本行为,请考虑将asp:Literal 作为一种技术。

    但除非您通过 LinkBut​​ton 的 Click 事件执行服务器端活动,否则在这里使用它似乎没有多大意义。

    【讨论】:

    • 我同意。首先,我想使用我已经为其他地方使用的链接按钮创建的皮肤。
    • 你不能修改皮肤,或者根据皮肤中使用的锚定样式来确定给定锚的样式吗?
    • 即使在以下情况下禁用了服务器回发,您也可能更喜欢链接按钮:1) 您仍然希望从实现 INamingContainer 的控件中受益。例如,您在一个页面上有多个用户控件,每个控件都包含一个需要唯一 ID 的 LinkBut​​ton。 2)你想保持asp客户端验证。
    • 另外,有时 LinkBut​​tons 被用作 ajax 扩展器控件的目标控件
    • 您可能希望它动态生成按钮。但是你可以使用 new HtmlGenericControl()
    【解决方案3】:

    你也可以的

    ...LinkButton ID="BtnForgotPassword" runat="server" OnClientClick="ChangeText('1');<b>return false"</b>...

    它会停止链接按钮回发

    【讨论】:

    • 它可以工作,但问题是,如果您在模态弹出后进行一些操作,例如删除记录,这根本不起作用。它只是简单地刷新页面。没有别的了。
    【解决方案4】:

    只需设置 href="#"

    <asp:LinkButton ID="myLink" runat="server" href="#">Click Me</asp:LinkButton>
    

    【讨论】:

    • 根据我的测试,这将导致页面向上滚动。
    【解决方案5】:

    我认为您应该使用 HyperLink 控件进行调查。它是一个服务器端控件(因此您可以从代码中操纵可见性等),但它省略了常规的 ol' 锚标记并且不会导致回发。

    【讨论】:

      【解决方案6】:

      刚刚经历过这个,正确的做法是使用:

      1. OnClientClick
      2. return false

      如以下示例代码行:

      <asp:LinkButton ID="lbtnNext" runat="server" OnClientClick="findAllOccurences(); return false;" />
      

      【讨论】:

        【解决方案7】:

        在 C# 中,你会做这样的事情:

        MyButton.Attributes.Add("onclick", "put your javascript here including... return false;");
        

        【讨论】:

          【解决方案8】:

          而不是实现属性:

          public partial class _Default : System.Web.UI.Page{
           protected void Page_Load(object sender, EventArgs e)
           {
              someID.Attributes.Add("onClick", "return false;");
           }}
          

          用途:

          OnClientClick="return false;"
          

          asp:LinkBut​​ton 标签内部

          【讨论】:

            【解决方案9】:

            为避免刷新页面,如果return false 不能与asp:LinkButton 一起使用,请使用

            href="javascript: void;"
            

            href="#"
            

            连同OnClientClick="return false;"

            <asp:LinkButton ID="linkPrint" runat="server" CausesValidation="False" href="javascript: void;"
                    OnClientClick="javascript:self.print();return false;">Print</asp:LinkButton>
            

            以上代码将调用浏览器打印而不刷新页面。

            【讨论】:

              【解决方案10】:

              在 onclick 事件上调用 java 脚本函数。

              【讨论】:

                【解决方案11】:

                您是否尝试过使用OnClientClick

                var myLinkButton = new LinkButton { Text = "Click Here", OnClientClick = "JavaScript: return false;" };
                
                <asp:LinkButton ID="someID" runat="server" Text="clicky" OnClientClick="JavaScript: return false;"></asp:LinkButton>
                

                【讨论】:

                  【解决方案12】:

                  如果您想保留滚动位置,您可以做的其他事情是:

                  <asp:LinkButton runat="server" id="someId" href="javascript: void;" Text="Click Me" />
                  

                  【讨论】:

                    【解决方案13】:

                    为什么不使用一个空的 ajax 更新面板并将链接按钮的点击事件连接到它呢?这样只有更新面板会得到更新,从而避免回发并允许您运行您的 javascript

                    【讨论】:

                      【解决方案14】:

                      似乎没有人这样做:

                      createEventLinkButton.Attributes.Add("onClick", " if (this.innerHTML == 'Please Wait') { return false; } else {  this.innerHTML='Please Wait'; }");
                      

                      这似乎是唯一可行的方法。

                      【讨论】:

                        【解决方案15】:

                        在 jquery 就绪函数中,您可以执行以下操作 -

                        var hrefcode = $('a[id*=linkbutton]').attr('href').split(':');
                        var onclickcode = "javascript: if`(Condition()) {" + hrefcode[1] + ";}";
                        $('a[id*=linkbutton]').attr('href', onclickcode);
                        

                        【讨论】:

                        • 欢迎来到 StackOverflow!由于 OP 没有提到 JQuery,因此您的回答有点离题。为了使答案更好,您可以在此处包含有关如何合并 JQuery 的其他上下文。另一方面,由于这个问题在 5 年前被问及(多次)回答,此时只有非常切题的答案才有用。
                        【解决方案16】:

                        您可能还希望客户端函数返回 false。

                        <asp:LinkButton runat="server" id="button" Text="Click Me" OnClick="myfunction();return false;" AutoPostBack="false" />
                        

                        您也可以考虑:

                        <span runat="server" id="clickableSpan" onclick="myfunction();" class="clickable">Click Me</span>
                        

                        我使用可点击类来设置指针、颜色等内容,使其外观类似于锚标记,但我不必担心它会被回发或必须执行 href=" javascript:void(0);"把戏。

                        【讨论】:

                        • OnClick 绑定的是服务器端事件,而不是客户端事件。 onclientclick 是客户端事件
                        【解决方案17】:

                        使用 html 链接代替 asp 链接,您可以在服务器端的 html 链接之间使用标签 控制

                        【讨论】:

                          猜你喜欢
                          • 1970-01-01
                          • 2019-09-24
                          • 2014-04-26
                          • 1970-01-01
                          • 2018-12-24
                          • 2011-07-29
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          相关资源
                          最近更新 更多