web-dev-qa-db-fra.com

Utilisation de HtmlAnchor ou ASP.NET HyperLink pour la balise d'ancrage qui navigue dans la page nommée ancre

J'essaie de rendre un simple lien hypertexte qui renvoie à une ancre nommée dans la page, par exemple:

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

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

Le problème est que lorsque j'utilise un contrôle ASP.NET comme asp:HyperLink ou HtmlAnchor, le href="#namedAnchor" est rendu par href="controls/#namedAnchor" (où controls est le sous-répertoire où se trouve le contrôle utilisateur contenant l'ancre). Voici le code du contrôle, utilisant deux types de contrôles d'ancrage, qui ont tous deux le même problème:

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

La source générée ressemble à:

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

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

Je veux vraiment juste:

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

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

J'utilise la classe HtmlAnchor ou HyperLink parce que je veux apporter des modifications à d'autres attributs dans le code derrière. Je ne veux pas introduire un contrôle Web personnalisé pour cette exigence, car l'exigence que je poursuis n'est pas assez importante pour justifier l'abandon des contrôles de lien ASP.NET traditionnels. Il semble que je devrais être en mesure d'utiliser les contrôles de lien ASP.NET pour générer le lien souhaité.

20

Au lieu d'utiliser la propriété NavigateUrl, utilisez simplement la propriété href

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

Pour définir la propriété HREF dans codebehind:

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

Cela vous donnera:

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

Définissez-le en tant que propriété personnalisée sur le lien:

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

Cela vous donnera:

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

Si vous devez utiliser NavigateUrl Property, ce qui est parfois nécessaire, vous pouvez utiliser:

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