2016-10-03 5 views
-1

ich eine Zeichenfolge in Razor mit dem folgenden Code zu drucken versuche:Output Razor Code in @ Html.Raw

@Html.Raw("Welcome @(ViewBag.Content.User.Name)!") 

Der Ausgang dieser Saite ist leider: „Welcome @ (ViewBag.Content.User. Name)!". Aber wenn ich es auf diese Weise zu drucken:

@Html.Raw("Welcome " + @(ViewBag.Content.User.Name) + "!") 

Der Ausgang des String ist: „Welcome Yanick!“, Genau das, was ich will, aber ich will es nicht auf diese Weise drucken. Gibt es eine Möglichkeit, den Razor-Code innerhalb einer Zeichenfolge auszuführen (siehe erstes Beispiel)? Ich habe versucht auch Html.Encode(), aber das hat nicht funktioniert entweder ...

+0

ich glaube nicht, Sie können. Die zweite Zeile ist in Ordnung, wir benutzen sie alle die ganze Zeit, richtig? –

+0

Ja, ich weiß, aber ich habe es wie die erste Zeichenfolge in der Datenbank gespeichert. Nur ein einfacher, hartcodierter Editor speichert diese Zeichenkette ... –

+2

Wenn sich die Zeichenkette in der Datenbank als "Willkommen @ (ViewBag.Content.User.Name)!" Befindet, dann können Sie sie nur manuell ausführen Zuerst die Razor-Engine, bevor Sie sie an '@ Html.Raw' übergeben. Der Parameter für 'Html.Raw' ist nur eine C# -Zeichenfolge, und Razor analysiert den Inhalt von Zeichenfolgen in Codeblöcken nicht. –

Antwort

0

Sie C# Version 6.0 Funktion verwenden können, genannt string interpolation.

In Ihrem Fall wäre es:

@Html.Raw($"Welcome {ViewBag.Content.User.Name}!") 

Wenn Sie C# Version < 6.0 verwenden, dann string.Format Ihre Wahl ist:

@Html.Raw(string.Format("Welcome {0}!", ViewBag.Content.User.Name)) 
+0

Wenn Sie diese Kontrolle über die Zeichenfolge haben, ist es viel besser, es einfach als literalen HTML-Inhalt zu setzen. – GSerg

+0

@GSerg das ist die Frage für den Autor der Frage, ich weiß nicht, warum er '@ Html.Raw' verwendet –