41 votes

Comment puis-je contourner le codage HTML lors de l'utilisation de Html.ActionLink dans Mvc?

Chaque fois que je utiliser de l'Html.ActionLink il toujours en Html code pour ma chaîne d'affichage. Par exemple je veux mon lien pour ressembler à ceci:

<a href="http://stackoverflow.com/posts/422/My-Post-Title-Here">More&hellip;</a>

il sort comme ça: Plus de&hellip;

&hellip est "..." au cas où vous vous poseriez.

Cependant, le actionlink sorties le texte "&hellip;" comme texte de lien. J'ai le même problème si je veux de sortie ce:

<a href="http://stackoverflow.com/posts/422/My-Post-Title-Here"><em>My-Post-Title-Here</em></a>

Je me retrouve avec: <em>Mon-Poste-Titre-Ici</em>

Une idée de comment faire cela?

79voto

tvanfosson Points 268301

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

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

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

 @Html.ActionLink(HttpUtility.Decode("More&hellip;"), "Posts", ...)
 

10voto

JNK Ojiaku Points 61

La réponse donnée par Sam est en fait correcte et je l’ai utilisée dans ma solution, c’est pourquoi j’ai essayé moi-même. Vous voudrez peut-être supprimer la parenthèse supplémentaire pour qu'elle ressemble à ceci:

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

7voto

bobince Points 270740

Sinon, il suffit d'utiliser un simple Unicode caractère de points de suspension \u2026 et laissez MVC préoccuper de la façon de coder. Sauf si il y a autant de raison convaincante vous avais précisément besoin d'un hellip entité de référence, par opposition à un personnage de référence ou tout simplement, y compris le caractère de simples octets UTF-8.

Alternative sinon: il suffit d'utiliser trois périodes. Les points de suspension (U+2026) est une compatibilité de caractères, uniquement pour l'aller-retour à pré-codages Unicode. Il est très peu par rapport à de simples points.

7voto

Pavel Shkleinik Points 329

Regarde ça:

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

4voto

Sam Points 466

Décodez-le avant de transmettre la valeur. Je viens d'avoir ce même problème (caractères différents) et cela fonctionne bien:

Par exemple:

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

Ennuyeux cependant

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X