2009-01-08 4 views
39

Chaque fois que j'utilise Html.ActionLink, Html code toujours ma chaîne d'affichage. Par exemple, je veux que mon lien pour ressembler à ceci:Comment contourner le codage HTML lors de l'utilisation de Html.ActionLink en Mvc?

<a href="/posts/422/My-Post-Title-Here">More&hellip;</a> 

il sort comme ceci: More&hellip;

& est hellip "..." Incase vous vous demandiez.

Cependant, le lien action produit le texte actuel "& hellip;" comme le texte du lien. J'ai le même problème avec si je veux cette sortie:

<a href="/posts/422/My-Post-Title-Here"><em>My-Post-Title-Here</em></a> 

avec je le vent: <em>My-Post-Title-Here</em>

Toute idée comment faire cela?

Répondre

76

Il semble que ActionLink utilise toujours les appels HttpUtility.Encode sur le texte du lien. Vous pouvez utiliser UrlHelper pour générer le href et construire le tag d'ancrage vous-même.

<a href='@Url.Action("Posts", ...)'>More&hellip;</a> 

Vous pouvez également "décoder" la chaîne que vous transmettez à ActionLink. Construire le lien en HTML semble être légèrement plus lisible (pour moi) - surtout dans Razor. Ci-dessous est l'équivalent pour la comparaison.

@Html.ActionLink(HttpUtility.HtmlDecode("More&hellip;"), "Posts", ...) 
+0

@tvanfosson près de 4 ans plus tard ... est-ce encore la meilleure méthode pour le rembourrage des caractères spéciaux comme des esperluettes, des carets, etc. dans le texte du lien? –

+0

@ one.beat.consumer Je le pense, mais il y a une alternative que j'ai ajoutée. Également mis à jour pour refléter la syntaxe de Razor. – tvanfosson

+0

@tvanfosson un homme bon, et approfondie, tvan. Merci. –

7

Sinon, il suffit d'utiliser un caractère Unicode ellipsis plaine \ u2026 et nous MVC vous soucier de la façon de coder. À moins d'une raison particulièrement convaincante, vous auriez spécifiquement besoin d'une référence d'entité hellip plutôt que d'une référence de caractère ou d'inclure simplement le caractère en octets UTF-8 simples. Alternative: il suffit d'utiliser trois périodes. L'ellipse (U + 2026) est un caractère de compatibilité, uniquement inclus dans les codages aller-retour aux pré-Unicode. Cela vous donne très peu de points par rapport aux points simples. .

+1

L'ellipse est plus significativement sémantiquement significative que trois périodes. Il est également généralement rendu plus joliment. – bdesham

4

Decode avant de passer la valeur juste eu ce même problème (caractères différents) et il fonctionne très bien:

Par exemple:

@Html.ActionLink(HttpUtility.HtmlDecode(_("&amp;")), "Index", "Home") 

Annoying si

10

La réponse donnée par Sam est effectivement correct et je l'ai utilisé dans ma solution donc je l'ai donc essayé moi-même. Vous pouvez supprimer la parenthèse supplémentaire de sorte qu'il devient quelque chose comme ceci:

@Html.ActionLink(HttpUtility.HtmlDecode("&amp;"), "Index", "Home") 
7

Découvrez ceci:

<p>Some text @(new HtmlString(stringToPaste)) </p> 
Questions connexes