2010-07-27 9 views
9

Ich schreibe gerade ein kleines Templating-System in ASP.NET, damit Benutzer Inhalte hinzufügen können. Beispielsweise kann der Benutzer die Zeichenfolge eingeben (Variablentyp ist Zeichenfolge).Formatieren von Zeichenfolgen in ASP.NET Razor

topHeader[x] = "They think it's all over. It is now!"; 

jedoch eine Änderung, die benötigt wird, ist die Fähigkeit, einige grundlegende HTML-Tags innerhalb dieser Inhalte hinzuzufügen, so können die folgenden

topHeader[x] = "They think it's all over. <strong>It is now!</strong>"; 

oder

topHeader[x] = "They think it's all over. <a title="Football News" href="URL">It is now!</a>"; 

getan werden, wenn Sie hinzufügen Solche Dinge in Strings sind jetzt nicht als HTML formatiert, aber ich möchte ihnen irgendwie entkommen, so dass sie sein können. Natürlich habe ich im Internet nach der Antwort gesucht, aber da Razor ziemlich neu ist, gibt es nicht viel da draußen, um mir zu helfen.

Jeder hat eine Idee, wie man das macht?

Antwort

9

Sie müssen eine IHtmlString Implementierung erstellen, die Ihre HTML-Quelle enthält.

Razor plant eine Hilfsmethode, um dies für Sie zu tun, aber, AFAIK, noch nicht, also glaube ich, dass Sie Ihre eigene Klasse erstellen müssen, die die Schnittstelle implementiert und Ihr HTML von der zurückgibt GetHtmlString() Methode.
BEARBEITEN: Sie können die Klasse HtmlString verwenden.

können Sie entweder Ihre topHeader Wörterbuch ändern IHtmlString s statt String s zu halten, oder Sie können Ihren Code wie es ist, lassen aber in einem HtmlString in der Razor Ansicht wickeln:

<tag>@new HtmlString(topHeader[x])</tag> 

Stellen Sie sicher, Korrigieren Sie alle Nicht-HTML-Sonderzeichen korrekt.

4

SLaks ist richtig, aber Sie müssen nicht Ihre eigene Implementierung von IHtmlString schreiben, es ist ein eingebaut in System.Web namens HtmlString. Also:

topHeader[x] = new HtmlString("They think it's all over. <a title=\"Football News\" href=\"URL\">It is now!</a>"); 

Sollte der Trick tun.

+0

ich das versucht habe, aber erhalten „CS0029: Kann nicht implizit Typ‚System.Web.HtmlString‘zu‚string‘konvertieren“ Jede Idee, was ich tue falsch? –

+1

@EnderMB: Ändern Sie das Wörterbuch so, dass es "IHtmlString" oder "Objekt" enthält. – SLaks

9

Die von ihnen hinzugefügte Hilfsmethode heißt Html.Raw() und ist viel sauberer. Hier

ein Beispiel:

@Html.Raw("Hello <a>World</a>!") 
+0

Das funktionierte wie ein Charme! Und es ist einfacher als die anderen Antworten zur Verfügung gestellt. – sksallaj