Die Dokumentation für MvcHtmlString
ist nicht besonders aufschlussreich:
Stellt eine HTML-codierte Zeichenfolge dar, die nicht erneut codiert werden sollte.
Mir ist nicht klar, was genau die Auswirkungen davon sind. Es scheint, dass einige HTML-Hilfsmethoden eine zurückgebenMvcHtmlString
, aber einige Beispiele, die ich online von benutzerdefinierten Helfern gesehen habe, geben nur eine reguläre Zeichenfolge zurück.
Fragen:
Was ist ein MvcHtmlString
?
Wann soll ich wählen MvcHtmlString
über , string
und umgekehrt? Warum?
quelle
MvcHtmlString
dies nicht implementiert wird,IHtmlString
da dies nur in 4 vorhanden ist. Die<%:
Syntax muss vom Typ duck-type sein - sie wird unabhängig von der Schnittstelle immer.ToHtmlString()
vorher aufgerufen.ToString()
.MvcHtmlString.Create
erkennt die Methode, ob sieIHtmlString
verfügbar ist, und erstellt dynamisch die zurückgegebene Klasse, um sie zu unterstützen, wenn dies der FallDies ist eine späte Antwort, aber wenn jemand, der diese Frage liest, Rasiermesser verwendet, sollten Sie sich daran erinnern, dass Rasiermesser standardmäßig alles codiert. Wenn Sie jedoch
MvcHtmlString
in Ihren HTML-Helfern verwenden, können Sie Rasiermesser mitteilen, dass es nicht codiert werden muss .Wenn Sie möchten, dass der Rasierer keine Zeichenfolge codiert, verwenden Sie
Das Dekompilieren von Raw () zeigt uns, dass die Zeichenfolge in einen HtmlString eingeschlossen wird
" HtmlString ist nur in ASP.NET 4 vorhanden.
MvcHtmlString war ein Kompatibilitäts-Shim, der MVC 2 hinzugefügt wurde, um sowohl .NET 3.5 als auch .NET 4 zu unterstützen. Da MVC 3 nur .NET 4 ist, ist es aus Gründen der Quellkompatibilität eine ziemlich triviale Unterklasse von HtmlString, vermutlich für MVC 2-> 3. " Quelle
quelle
Eine gute praktische Anwendung ist, wenn Sie Ihre eigenen
HtmlHelper
Erweiterungen erstellen möchten . Ich hasse es beispielsweise, mich an die<link>
Tag-Syntax zu erinnern , deshalb habe ich meine eigene Erweiterungsmethode erstellt, um ein<link>
Tag zu erstellen:Ich hätte
String
von dieser Methode zurückkehren können, aber wenn ich Folgendes hätte, würde es kaputt gehen:<%: Html.CssBlock(Url.Content("~/sytles/mysite.css")) %>
Mit
MvcHtmlString
einem<%: ... %>
oder<%= ... %>
beiden funktionieren beide korrekt.quelle
Sie würden ein verwenden,
MvcHtmlString
wenn Sie Roh-HTML an eine MVC-Hilfsmethode übergeben möchten und Sie nicht möchten, dass die Hilfsmethode den HTML-Code codiert.quelle
MvcHtmlString
aus einem HTML - Helfer - Methode?