禁用 <ASP:LinkButton> 的回发(postback)

63

我有一个ASP.NET的linkbutton控件在我的表单上。我想在客户端使用它进行javascript操作,并防止它向服务器提交表单。(我想使用linkbutton控件是为了能够样式定制和某些情况下禁用它,所以直接使用a标签并不是首选方法)。

如何防止它向服务器提交表单?

17个回答

68

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”链接; 但是,如果为true,href将被执行。这样可以消除您的后退。


1
<asp:LinkButton ID="LinkButton5" runat="server" OnClick="A_Click" CssClass="linkOff" Text="编辑"></asp:LinkButton>,添加上面的代码后,单击无效 :/ - SearchForKnowledge
非常完美,我已经为此苦苦挣扎了一段时间,因为不想调用 __postback 而是调用一些 JS。非常感谢。 - Andrew

40

这个回答可能听起来不太有用......但是为什么你要在纯客户端操作时使用 LinkButton 呢?请使用标准的 HTML 锚元素,并将其 onclick 操作设置为您的 JavaScript。

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

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

但是,除非您从 LinkButton 的 Click 事件执行服务器端活动,否则在此处使用它似乎没有太多意义。


我同意。首要的,我想使用我已经为其他地方使用的链接按钮创建的皮肤。 - y0mbo
你能否不修改皮肤,或者基于皮肤中使用的样式来设置给定锚点的样式? - John Rudy
2
即使服务器端回发被禁用,您可能仍然喜欢LinkButton,原因如下: 1)您仍希望控件实现INamingContainer的好处。例如,您在页面上有多个用户控件,每个控件都包含需要唯一ID的LinkButton。 2)您想保留ASP客户端验证。 - John Grant
1
有时候,LinkButton 会被用作 Ajax 扩展控件的目标控件。 - Bron Davies
你可能希望动态生成按钮。但是,你可以使用新的HtmlGenericControl()。 - FalcoGer

27

你也可以做到

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

它会阻止链接按钮的后台提交(postback)


它能够工作,但问题在于,如果你有一些操作正在进行,比如在模态弹出窗口之后删除记录,这根本不起作用。它只是简单地刷新页面。什么都没有发生。 - Rohan Rao

15

只需将href设置为“#”

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

从我测试的结果来看,这会导致页面滚动到顶部。 - Yang You

6

我认为你应该考虑使用超链接控件。它是一个服务器端控件(所以你可以从代码中操纵可见性等),但它省略了常规的锚标签并且不会引起提交回发。


6

我曾经遇到过这个问题,正确的做法是使用以下两步:

  1. OnClientClick
  2. return false

例如下面这行代码:

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

4

在C#中,你可以这样做:

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

2
为了避免页面刷新,如果return falseasp: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>

上面的代码将会在不刷新页面的情况下调用浏览器打印功能。

2

不要实现属性:

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:LinkButton 标签内部

1

你尝试过使用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>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接