asp.net LinkBut​​ton OnClick 未使用 href 触发

Posted

技术标签:

【中文标题】asp.net LinkBut​​ton OnClick 未使用 href 触发【英文标题】:asp.net LinkButton OnClick is not firing with href 【发布时间】:2020-12-26 07:37:14 【问题描述】:

我有一个 LinkBut​​ton,它工作得非常好,但是当我向 LinkBut​​ton 添加一个 href 时,它会将我重定向到链接而不触发 OnClick 函数。

<asp:LinkButton target="_blank" ID="ad_main_form"  
    OnClick="ad_button_Click" runat="server"  
    CssClass="ad_main_panel" CausesValidation="False" 
    href="https://***.com">
</asp:LinkButton>

如何同时触发 OnClick 和 href?

【问题讨论】:

你可以离开页面,也可以不离开,我不认为你可以两者兼得。 执行以下操作:删除 href,在浏览器中加载页面并 > 查看源代码以查看链接按钮发生了什么。然后添加一个 PostBackUrl 并重新加载浏览器并 > 再次查看源代码。 @Jamal 这不是没有意义,我想让用户打开带有 href 的链接。并跟踪用户在后端单击该链接(锚标记)的次数。 Response.redirect() 有效,但我不想从服务器端这样做,我想在客户端打开链接并跟踪服务器端的点击 @Drust-Taib,根据您的说明,请参阅下面的回答;由于没有 href,您需要使用 OnClientClick(),如下所示。这对你有用吗? 【参考方案1】:

asp:LinkBut​​ton 没有 href 标签。

服务器端需要 OnClick,客户端需要 OnClientClick

 <asp:LinkButton ID="ad_main_form"
            runat="server"
            OnClick="ad_button_Click"
            OnClientClick="javascript: window.open('https://***.com');">
            Click me
 </asp:LinkButton>

背后的C#代码:

 protected void ad_button_Click(object sender, EventArgs e)
    
        // your code
    
       

您也可以通过这种方式处理它并向 OnClientClick() 提供自定义 JavaScript 函数。请参阅 Navigate(url) 函数。代码隐藏保持不变。

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="YourProject.WebForm1" %>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<script type="text/javascript">
    function Navigate(url)          
        javascript: window.open(url);
    
</script>  

<body>
  <form id="form1" runat="server">
    <div>
        <asp:LinkButton ID="ad_main_form"
            runat="server"
            OnClick="ad_button_Click"
            OnClientClick="Navigate('https://***.com')" 
            CausesValidation="False">
            Click me
        </asp:LinkButton>
    </div>
  </form>    
</body>

代码已经过测试,运行良好!

【讨论】:

【参考方案2】:

LinkButton 有一个名为 PostbackUrl 的属性,而不是使用 href 请使用此属性。

为了避免所有这些麻烦,我会做的是,在我的点击处理程序中调用 Response.Redirect('url'),以便它以更简洁的方式完成这两项工作。

更新 很遗憾,您无法使用Response.Redirect() 方法在新标签中打开,但您当然可以编写javascript 代码以在新标签中打开网址。见:

Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "openurl", "window.open('http://www.mywebsite.com' ,'_blank');", true);

或者,您可以简单地这样做:

Response.Write("<script>window.open('http://www.mywebsite.com', '_blank')</script>");

【讨论】:

@DrustTaib 我认为您将评论发布为空白。 @Jamshid Kamaran 很抱歉评论是意外。我有两个担忧 1- response.redirect() 正在做同样的事情,但 response.redirect() 来自服务器端。我想从客户端做。 2- 我想在新的浏览器选项卡中打开链接,我们可以使用 response.redirect() 吗? @DrustTaib 请参考我的回答中的更新。 @Jamshid Kamaran 谢谢你的回答。我知道它有效,但我真正想要的是在客户端而不是服务器端打开链接。 @DrustTaib window.open 是客户端方法,您只是使用服务器将javascript注入您的页面,这是因为服务器无论如何都会被触发,所以如果您通过服务器打开链接就可以了。

以上是关于asp.net LinkBut​​ton OnClick 未使用 href 触发的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET - 在 RenderContent 调用中将事件处理程序添加到中继器内的 LinkBut​​ton

使用确认警报 ASP.Net 单击 Gridview LinkBut​​ton 上的突出显示行

为啥 GridView 中的 LinkBut​​ton 不会引发其 OnClick 事件?

ASP.Net 用户控件悬停导致点击

使用 jquery 切换 LinkBut​​ton 的启用/禁用状态

UpdatePanel 中 ListView 中的 LinkBut​​ton 导致完全回发