razor c#
¿Cómo puedo exportar html sin formato cuando uso RazorEngine(NO desde MVC)? (6)
Construyó un contenedor para RazorEngine que agrega soporte para @Html.Raw()
y @Html.Partial()
Intento generar correos electrónicos con contenido HTML. este contenido ya ha pasado por saneamiento, así que no estoy preocupado en ese sentido, sin embargo, cuando llamo:
Razor.Parse(template, model);
en la siguiente plantilla Razor:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<body>
@(new System.Web.HtmlString(Model.EmailContent))
</body>
</html>
el correo electrónico que se emite tiene codificación HTM1, pero necesito que se decodifique. ¿Cómo puedo lograr esto?
Encontré que todo esto funcionó conmigo.
@{var myHtmlString = new HtmlString(res);}
@myHtmlString
@MvcHtmlString.Create(res)
@Html.Raw(res)
Estoy usando RazorEngine 3.8.2 y @Raw(Model.Content)
funciona perfectamente bien para mí.
Para su información, tengo un tenedor que incluye la sintaxis @ Html.Raw (...) aquí:
RazorEngine, como el Razor View Engine de MVC, codificará automáticamente los valores escritos en la plantilla. Para evitar esto, presentamos una interfaz llamada IEncodedString
, con las implementaciones predeterminadas como HtmlEncodedString
y RawString
.
Para usar este último, simplemente haga una llamada al método Raw
incorporado de TemplateBase
:
@Raw(Model.EmailContent)
Si tiene una clase base personalizada para sus plantillas, puede codificar el método Write
para que se comporte de forma similar a la plantilla MVC normal: si el valor de salida es IHtmlString
no debería codificarlo.
Aquí está el código que estoy usando en mi clase de TemplateBase
:
// Writes the results of expressions like: "@foo.Bar"
public virtual void Write(object value)
{
if (value is IHtmlString)
WriteLiteral(value);
else
WriteLiteral(AntiXssEncoder.HtmlEncode(value.ToString(), false));
}
// Writes literals like markup: "<p>Foo</p>"
public virtual void WriteLiteral(object value)
{
Buffer.Append(value);
}