Wie ScottGu in seinem Blog- Beitrag sagt, werden standardmäßig mit einem @ -Block ausgegebene Inhalte automatisch HTML-codiert, um einen besseren Schutz vor XSS-Angriffsszenarien zu gewährleisten. Meine Frage ist: Wie können Sie eine nicht HTML-codierte Zeichenfolge ausgeben?
Der Einfachheit halber halten Sie sich bitte an diesen einfachen Fall:
@{
var html = "<a href='#'>Click me</a>"
// I want to emit the previous string as pure HTML code...
}
asp.net
razor
html-encode
Hemme
quelle
quelle
new HtmlString()
in MVC 3 verwenden können, da dieser Typ .NET 4 ist.neuer HtmlString ist definitiv die Antwort.
Wir haben uns einige andere Änderungen der Rasierersyntax angesehen, aber letztendlich war keine davon wirklich kürzer als der neue HtmlString.
Wir können das jedoch in einen Helfer einwickeln. Möglicherweise...
oder
quelle
Ich bin auch auf dieses Problem gestoßen, als ich unser Projekt auf die neue Razor View Engine umgestellt habe. Der Ansatz, den ich gewählt habe, war etwas anders, da wir JSON-Daten aus C # generieren mussten und diese beim Laden der Seite ausgeben wollten.
Was ich schließlich tat, war, eine RawView zu implementieren, die eine Parallele von View in den cshtml-Dateien war. Im Wesentlichen, um eine rohe Zeichenfolge zu erhalten,
Dies erfordert einige Änderungen an das Projekt - Layout, so dass ich nur eine Blog - Post über sie schrieb nach oben hier . Kurz gesagt, dies erforderte eine doppelte Implementierung des DynamicViewDataDictionary von MVC und eine neue WebViewPage, die RawView enthält. Ich habe auch den Indexoperator in RawView implementiert, um dies zu ermöglichen
In dem Fall, dass jemand die Daten mit einer Liste von Schlüsseln durchlaufen muss.
Wenn ich den Kommentar von anurse gelesen hätte, wäre es wahrscheinlich besser gewesen, wenn ich dies als Literal anstelle von RawView bezeichnet hätte.
quelle
Ich verwende ASP.NET MVC und Razor unter Mono.
Ich konnte HtmlHelper aus bestimmten Gründen nicht von System.Web.WebPages von System.Web.Mvc erhalten.
Aber ich habe es geschafft, eine nicht codierte Zeichenfolge auszugeben, nachdem ich die Eigenschaft des Modells als deklariert habe
RazorEngine.Text.RawString
. Jetzt wird wie erwartet ausgegeben.Beispiel
Ausgabe:
quelle