asp.net LinkButton OnClick 未使用 href 触发
Posted
技术标签:
【中文标题】asp.net LinkButton OnClick 未使用 href 触发【英文标题】:asp.net LinkButton OnClick is not firing with href 【发布时间】:2020-12-26 07:37:14 【问题描述】:我有一个 LinkButton,它工作得非常好,但是当我向 LinkButton 添加一个 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:LinkButton 没有 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 谢谢你的回答。我知道它有效,但我真正想要的是在客户端而不是服务器端打开链接。 @DrustTaibwindow.open
是客户端方法,您只是使用服务器将javascript注入您的页面,这是因为服务器无论如何都会被触发,所以如果您通过服务器打开链接就可以了。
以上是关于asp.net LinkButton OnClick 未使用 href 触发的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET - 在 RenderContent 调用中将事件处理程序添加到中继器内的 LinkButton
使用确认警报 ASP.Net 单击 Gridview LinkButton 上的突出显示行
为啥 GridView 中的 LinkButton 不会引发其 OnClick 事件?