使用HtmlAnchor或ASP.NET HyperLink作为导航页内命名锚点的锚标记

时间:2010-04-07 18:58:55

标签: asp.net anchor

我正在尝试渲染链接到页面中命名锚点的简单超链接,例如:

<a href="#namedAnchor">scroll to down</a>

<a name="namedAnchor">down</a>

问题是,当我使用像asp:HyperLinkHtmlAnchor这样的ASP.NET控件时,href="#namedAnchor"会呈现为href="controls/#namedAnchor"(其中controls是包含锚点的用户控件所在的子目录。下面是控件的代码,使用两种类型的锚控件,它们都有相同的问题:

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Test.ascx.cs" Inherits="TestWebApplication1.controls.Test" %>

<a href="#namedAnchor" runat="server">HtmlAnchor</a>

<asp:HyperLink NavigateUrl="#namedAnchor" runat="server">HyperLink</asp:HyperLink>

生成的源看起来像:

<a href="controls/#namedAnchor">HtmlAnchor</a>

<a href="controls/#namedAnchor">HyperLink</a>

我真的只是想要:

<a href="#namedAnchor">HtmlAnchor</a>

<a href="#namedAnchor">HyperLink</a>

我正在使用HtmlAnchorHyperLink类,因为我想更改后面代码中的其他属性。我不想为此要求引入自定义Web控件,因为我所追求的要求并不足以证明放弃传统的ASP.NET链接控件。看起来我应该能够使用ASP.NET链接控件来生成所需的链接。

4 个答案:

答案 0 :(得分:26)

只需使用href属性

,而不是使用NavigateUrl属性
<asp:HyperLink href="#namedAnchor" runat="server">HyperLink</asp:HyperLink>

答案 1 :(得分:7)

在codebehind中设置HREF属性:

HyperLink link = new HyperLink();
link.Attributes.Add("href", "#" + doc.DocumentID.ToString());
link.Text = doc.DocumentNumber;

这会给你:

<a href="#111">blah blah</a>

答案 2 :(得分:0)

在链接上将其设置为自定义属性:

        HyperLink link = new HyperLink();
        link.Attributes.Add("name", doc.DocumentID.ToString());
        link.Text = doc.DocumentNumber;

这会给你:

<a name="111">blah blah</a>

答案 3 :(得分:0)

如果必须使用有时是必需的 NavigateUrl 属性,则可以使用:

hypID.NavigateUrl = HttpContext.Current.Request.Url.AbsoluteUri & "#MyAnchor"