web-dev-qa-db-ja.com

ページ内の名前付きアンカーをナビゲートするアンカータグにHtmlAnchorまたはASP.NET HyperLinkを使用する

たとえば、ページ内の名前付きアンカーにリンクする単純なハイパーリンクをレンダリングしようとしています。

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

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

問題は、asp:HyperLinkHtmlAnchorなどのASP.NETコントロールを使用すると、href="#namedAnchor"href="controls/#namedAnchor"controlsはアンカーを含むユーザーコントロールがあるサブディレクトリ)。 2つのタイプのアンカーコントロールを使用するコントロールのコードを次に示します。どちらも同じ問題があります。

<%@ 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>

私はHtmlAnchorまたはHyperLinkクラスを使用しています。コードビハインドの他の属性を変更したいからです。私が追求している要件は、従来のASP.NETリンクコントロールを放棄することを正当化するほど重要ではないため、この要件にカスタムWebコントロールを導入したくありません。 ASP.NETリンクコントロールを使用して目的のリンクを生成できるように思えます。

20

NavigateUrlプロパティを使用する代わりに、hrefプロパティを使用する

<asp:HyperLink href="#namedAnchor" runat="server">HyperLink</asp:HyperLink>
26
R0MANARMY

分離コードでHREFプロパティを設定するには:

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

これはあなたに与えるでしょう:

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

リンクのカスタムプロパティとして設定します。

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

これはあなたに与えるでしょう:

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

NavigateUrlプロパティを使用する必要がある場合は、これが必要になる場合があります。使用できるのは次のとおりです。

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