Próbuję generować wiadomości e-mail z zawartością HTML. ta zawartość przeszła już przez higienę, więc nie martwię się o to, jednak kiedy dzwonię:
Razor.Parse(template, model);
w następującym szablonie Razor:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<body>
@(new System.Web.HtmlString(Model.EmailContent))
</body>
</html>
e-mail, który jest wysyłany, jest zakodowany w formacie HTMl, ale potrzebuję go zdekodować. Jak mogę to osiągnąć?
c#
razor
html-encode
KallDrexx
źródło
źródło
Odpowiedzi:
RazorEngine, podobnie jak silnik widoku Razor MVC, automatycznie zakoduje wartości zapisane w szablonie. Aby obejść ten problem, wprowadziliśmy interfejs o nazwie
IEncodedString
, z domyślnymi implementacjamiHtmlEncodedString
iRawString
.Aby użyć tego ostatniego, po prostu wywołaj wbudowaną
Raw
metodęTemplateBase
:źródło
FYI Mam widelec, który zawiera składnię @ Html.Raw (...) tutaj:
https://github.com/Antaris/RazorEngine/pull/105
źródło
Jeśli masz niestandardową klasę bazową dla swoich szablonów, możesz zakodować
Write
metodę, aby zachowywała się podobnie do zwykłego szablonu MVC: jeśli wartość wyjściowa jestIHtmlString
taka, nie należy jej kodować.Oto kod, którego używam w mojej
TemplateBase
klasie:źródło
Używam RazorEngine 3.8.2 i
@Raw(Model.Content)
działa dla mnie doskonale.źródło
Zbudowano opakowanie dla RazorEngine, które dodaje obsługę
@Html.Raw()
i@Html.Partial()
https://github.com/b9chris/RazorEngineComplete
źródło
Okazało się, że wszystkie te elementy współpracowały ze mną.
źródło