这不完全是费马的最后一个定理,但它一直让我感到烦恼,就像大学里的无薪电话账单一样。有时我想创建一个不会导致回发的HyperLink
,所以我希望目标网址为#。当标记恰好来自子文件夹中的UserControl时,
/
|- Home.aspx (uses UC.ascx)
|- Sub
|- UC.ascx
用相对路径重写URL,例如
<asp:HyperLink runat="server" NavigateUrl="#" >Click Me!</asp:HyperLink>
变为
<a href="SubFolder/#">Click Me!</a>
不幸的是,这是错误的。显然我可以通过不使用服务器控件来解决这个问题,但它似乎很愚蠢。这可以避免吗?
这里的重点是我将使用jQuery或代码隐藏添加click事件,我从不希望它导致回发,但我希望它是一个CSS原因的超链接。
答案 0 :(得分:11)
简单方法:
<asp:HyperLink ID="HyperLink1"
navigateUrl="#"
onclick="javascript:return false;"
runat="server">HyperLink</asp:HyperLink>
或
<asp:HyperLink ID="HyperLink1"
href="#"
runat="server">HyperLink</asp:HyperLink>
或jquery在你不想要回发的链接中添加一个类(nopostback):
$("a.nopostback").bind('click', function () {
return false;
})
答案 1 :(得分:6)
您可以设置服务器端元素的属性。
<asp:HyperLink ID="HyperLink1" runat="server" Text="Click me"
href="#" style="color: red;" />
在代码隐藏中,使用Attributes
属性
HyperLink1.Attributes
答案 2 :(得分:2)
实际上,将控件添加到页面而不 href / NavigateUrl属性可以提供最大的灵活性。
<asp:HyperLink ID="HyperLink1" runat="server"/>
然后在代码中分配href属性看起来像Bruno的答案:
HyperLink1.Attributes.Add("href","{your-value-here}");
尽管布鲁诺和卡斯帕的答案有所作为,但他们在某些情况下会有所突破。例如,假设您的HyperLink控件嵌套在Repeater中。如果您希望有条件地将href属性设置为实际URL或“#”,则这些方法将不起作用。每次都会呈现'#'。