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é.
Au lieu d'utiliser la propriété NavigateUrl, utilisez simplement la propriété href
<asp:HyperLink href="#namedAnchor" runat="server">HyperLink</asp:HyperLink>
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>
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>
Si vous devez utiliser NavigateUrl Property, ce qui est parfois nécessaire, vous pouvez utiliser:
hypID.NavigateUrl = HttpContext.Current.Request.Url.AbsoluteUri & "#MyAnchor"