Ich versuche, E-Mails mit HTML-Inhalten zu generieren. Dieser Inhalt wurde bereits saniert, daher mache ich mir diesbezüglich keine Sorgen, wenn ich jedoch anrufe:
Razor.Parse(template, model);
auf der folgenden Rasiermesser-Vorlage:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<body>
@(new System.Web.HtmlString(Model.EmailContent))
</body>
</html>
Die ausgegebene E-Mail ist HTMl-codiert, aber ich muss sie decodieren. Wie kann ich das erreichen?
c#
razor
html-encode
KallDrexx
quelle
quelle
Antworten:
RazorEngine codiert wie die Razor View Engine von MVC automatisch Werte, die in die Vorlage geschrieben wurden. Um dies zu umgehen, haben wir eine Schnittstelle namens
IEncodedString
mit den StandardimplementierungenHtmlEncodedString
und eingeführtRawString
.Um letzteres zu verwenden, rufen Sie einfach die eingebaute
Raw
Methode aufTemplateBase
:quelle
Zu Ihrer Information Ich habe hier eine Abzweigung, die die @ Html.Raw (...) -Syntax enthält:
https://github.com/Antaris/RazorEngine/pull/105
quelle
Wenn Sie eine benutzerdefinierte Basisklasse für Ihre Vorlagen haben, können Sie die
Write
Methode so codieren , dass sie sich ähnlich wie eine normale MVC-Vorlage verhält: Wenn der Ausgabewert lautetIHtmlString
, sollte sie nicht codiert werden.Hier ist der Code, den ich in meiner
TemplateBase
Klasse verwende:quelle
Ich benutze RazorEngine 3.8.2 und
@Raw(Model.Content)
arbeite einwandfrei für mich.quelle
Erstellt einen Wrapper für RazorEngine, der Unterstützung für
@Html.Raw()
und hinzufügt@Html.Partial()
https://github.com/b9chris/RazorEngineComplete
quelle
Ich fand, dass all dies bei mir funktioniert hat.
quelle