2009-01-08 3 views
39

Immer wenn ich Html.ActionLink verwende, codiert es immer Html meine Anzeigezeichenkette. Zum Beispiel möchte ich meine Link wie folgt aussehen:Wie umgehe ich die HTML-Codierung bei Verwendung von Html.ActionLink in Mvc?

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

gibt sie wie folgt aus: More&hellip;

& hellip ist "..." einhüllen Sie sich wundern.

Allerdings gibt der Actionlink den eigentlichen Text "& hellip;" als der Linktext. Ich habe das gleiche Problem mit, wenn ich die Ausgabe dieses wollen:

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

I aufzuwickeln mit: <em>My-Post-Title-Here</em>

eine Ahnung, wie dies zu tun?

Antwort

76

Es sieht so aus, als ob ActionLink immer Aufrufe HttpUtility.Encode für den Linktext verwendet. Sie könnten UrlHelper verwenden, um die href zu generieren und das Anker-Tag selbst zu erstellen.

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

Alternativ können Sie die Zeichenfolge, die Sie an ActionLink übergeben, "decodieren". Das Konstruieren des Links in HTML scheint für mich etwas lesbarer zu sein - besonders in Razor. Unten ist das Äquivalent zum Vergleich.

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

@tvanfosson fast 4 Jahre später ... das ist immer noch die beste Methode zum Füllen Sonderzeichen wie kaufmännische Und-Zeichen, Cares usw. in Linktext? –

+0

@ one.beat.consumer Ich denke schon, aber es gibt eine Alternative, die ich hinzugefügt habe. Auch aktualisiert, um die Razor-Syntax widerzuspiegeln. – tvanfosson

+0

@tvanfosson ein guter Mann, und gründlich, tvan. Vielen Dank. –

7

Alternativ können Sie nur ein schlichtes Zeichen \ u2026 Unicode Ellipsen und lassen MVC Sorgen darüber, wie es zu kodieren. Es sei denn, es gibt einen besonders zwingenden Grund, warum Sie eine hellip-Entity-Referenz im Gegensatz zu einer Zeichenreferenz benötigen oder einfach das Zeichen als einfache UTF-8-Bytes einschließen.

Alternative alternativ: nur drei Perioden verwenden. Die Ellipse (U + 2026) ist ein Kompatibilitätszeichen, das nur zum Round-Trip zu Unicode-Codierungen gehört. Es bringt dich sehr wenig im Vergleich zu einfachen Punkten. .

+1

Die Ellipse ist semantisch sinnvoller als drei Punkte. Es wird normalerweise auch schöner wiedergegeben. – bdesham

4

Decode es, bevor der Wert im Vorbeigehen hatte gerade das gleiche Problem (verschiedene Zeichen) und es funktioniert gut:

ZB:

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

Annoying obwohl

10

Die Antwort von Sam gegeben ist eigentlich richtig und ich habe es in meiner Lösung verwendet, also habe ich es selbst ausprobiert. Sie sollten die zusätzliche Klammern entfernen, so dass es so etwas wie dies zu:

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

Check out this:

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