Frage Uncodierte Strings in einer Razor-Ansicht ausgeben


Wie ScottGu in seinem Blog sagt Post «Standardmäßig wird Inhalt, der mit einem @ -Block ausgegeben wird, automatisch HTML-codiert, um besser vor XSS-Angriffsszenarien zu schützen». Meine Frage ist: Wie können Sie eine nicht-HTML-codierte Zeichenfolge ausgeben?

Der Einfachheit halber bleiben wir bei diesem einfachen Fall:

@{
 var html = "<a href='#'>Click me</a>"
 // I want to emit the previous string as pure HTML code...
}

76
2017-07-28 19:41


Ursprung


Antworten:


Dies ist mein bevorzugter Ansatz:

@Html.Raw("<p>my paragraph text</p>")

Quelle war Phil Haacks Razor-Syntaxreferenz: http://haacked.com/archive/2011/01/06/razor-syntax-quick-reference.aspx


107
2018-02-07 22:47



Sie können eine neue Instanz von MvcHtmlString erstellen, die nicht HTML-codiert wird.

@{
  var html = MvcHtmlString.Create("<a href='#'>Click me</a>")
}

Hoffentlich wird es in Zukunft einen einfacheren Weg für Razor geben.

Wenn Sie MVC nicht verwenden, können Sie Folgendes versuchen:

@{
  var html = new HtmlString("<a href='#'>Click me</a>")
}

17
2017-07-28 20:46



neuer HtmlString ist definitiv die Antwort.

Wir haben uns einige andere Änderungen an der Rasierersyntax angeschaut, aber letztlich war keiner von ihnen wirklich kürzer als neuer HtmlString.

Wir können das jedoch in einen Helfer einpacken. Möglicherweise...

@Html.Literal("<p>something</p>")

oder

@"<p>something</p>".AsHtml()

6
2017-07-29 01:15



Ich stieß auch auf dieses Problem, als wir unser Projekt auf die neue Razor View Engine umstellten. Der Ansatz, den ich nahm, war etwas anders, weil wir JSON-Daten aus C # generieren und beim Laden der Seite ausgeben wollten.

Was ich schließlich tat, war eine RawView zu implementieren, die eine Parallele von View innerhalb der cshtml-Dateien war. Im Wesentlichen, um eine rohe Schnur zu bekommen,

@(new HtmlString(View.Foo))

// became
@RawView.Foo

Das erfordert ein paar Änderungen am Projektlayout, also habe ich gerade einen Blogpost darüber geschrieben Hier. Kurz gesagt, dies erforderte eine doppelte Implementierung von MVCs DynamicViewDataDictionary und eine neue WebViewPage, die RawView enthält. Ich ging auch weiter und implementierte den Index-Operator auf RawView um zu berücksichtigen

@RawView["Foo"]

In dem Fall, dass jemand die Daten mit einer Liste von Schlüsseln durchlaufen muss.

Wenn ich den Kommentar einer Anurse gelesen habe, wäre es wahrscheinlich besser gewesen, wenn ich dies anstelle von RawView als Literal bezeichnet hätte.


0
2017-08-18 22:21