Ich habe sicheres / bereinigtes HTML in einer DB-Tabelle gespeichert.
Wie kann ich diesen HTML-Inhalt in einer Razor-Ansicht ausschreiben lassen?
Es entgeht immer Zeichen wie <
und kaufmännisches Und &
.
Ich habe sicheres / bereinigtes HTML in einer DB-Tabelle gespeichert.
Wie kann ich diesen HTML-Inhalt in einer Razor-Ansicht ausschreiben lassen?
Es entgeht immer Zeichen wie <
und kaufmännisches Und &
.
Antworten:
Angenommen, Ihr Inhalt befindet sich in einer Zeichenfolge mit dem Namen mystring
...
Sie können verwenden:
@Html.Raw(mystring)
Alternativ können Sie Ihre Zeichenfolge in HtmlString
einen anderen Typ konvertieren , der IHtmlString
im Modell oder direkt inline implementiert ist, und regulär verwenden @
:
@{ var myHtmlString = new HtmlString(mystring);}
@myHtmlString
razor
Syntax und Html.Raw
steht mir definitiv zur Verfügung.
In ASP.NET MVC 3 sollten Sie Folgendes tun:
// Say you have a bit of HTML like this in your controller:
ViewBag.Stuff = "<li>Menu</li>"
// Then you can do this in your view:
@MvcHtmlString.Create(ViewBag.Stuff)
Sie können verwenden
@{ WriteLiteral("html string"); }
Html.Raw()
funktioniert dort nicht
Manchmal kann es schwierig sein, rohes HTML zu verwenden. Hauptsächlich wegen der XSS-Sicherheitslücke. Wenn dies ein Problem darstellt, Sie aber dennoch rohes HTML verwenden möchten, können Sie die beängstigenden Teile codieren.
@Html.Raw("(<b>" + Html.Encode("<script>console.log('insert')</script>" + "Hello") + "</b>)")
Ergebnisse in
(<b><script>console.log('insert')</script>Hello</b>)
Neben der Verwendung @MvcHtmlString.Create(ViewBag.Stuff)
als von Dommer vorgeschlagen, empfehle ich Ihnen auch verwenden AntiXSS Bibliothek als phill vorgeschlagen http://haacked.com/archive/2010/04/06/using-antixss-as-the-default-encoder-for-asp -net.aspx
Es codiert fast alle möglichen XSS-Angriffszeichenfolgen.
Vollständiges Beispiel für die Verwendung von Vorlagenfunktionen in RazorEngine (z. B. zur E-Mail-Generierung):
@model SomeModel
@{
Func<PropertyChangeInfo, object> PropInfo =
@<tr class="property">
<td>
@item.PropertyName
</td>
<td class="value">
<small class="old">@item.OldValue</small>
<small class="new">@item.CurrentValue</small>
</td>
</tr>;
}
<body>
@{ WriteLiteral(PropInfo(new PropertyChangeInfo("p1", @Model.Id, 2)).ToString()); }
</body>
@Html.Raw()