NavigateUrl =“#”变成href =“SubFolder /#”?

时间:2011-01-06 20:20:33

标签: asp.net

这不完全是费马的最后一个定理,但它一直让我感到烦恼,就像大学里的无薪电话账单一样。有时我想创建一个不会导致回发的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原因的超链接。

3 个答案:

答案 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或“#”,则这些方法将不起作用。每次都会呈现'#'。