RazorEngine - Usar diseño y Html.Raw

Me gustaría usar la siguiente plantilla de Razor con RazorEngine:

@{
    Layout = null;
}

@Html.Raw(MyNamespace.MyClass.SomePropertyWithHtml)

Cuando lo llamo, recibo 2 errores: uno se queja de que no puede manejar el diseño y otro se queja de que no sabe cómo lidiar con el asistente Html.

Hay otras preguntas y respuestas aquí que sugieren que esto es posible en v3, y estoy usando el paquete actual en NuGet, v3.0.8, pero no está claro cómo se hace esto. Actualmente lo estoy llamando así:

string html = RazorEngine.Razor.Parse(File.ReadAllText(path));

Otras respuestas sugieren usar Razor.SetBaseTemplate primero, que no aparece en la fuente actual ni en la rama 3.0 en git. Mirando el código, veo código que hace referencia a diseños y secciones, pero el código de diseño parece depender de resolver una plantilla por nombre, mientras que lo que estoy tratando de hacer ni siquiera necesita resolver una plantilla, solo lo necesito para hacer frente con el Diseño = nulo. El código también incluye un MvcTemplateBase que parece ofrecer un HtmlHelper en el proyecto web, pero es la única clase en ese proyecto y no se menciona en ninguna parte de los proyectos web o Core.

Esta pregunta similar: Problemas de RazorEngine con @Html

Solo enlaces a la página de inicio que dicen que puede encontrar más allí; la página de inicio es solo una oración corta que describe el proyecto.

Entonces, ¿cómo analizo la vista anterior de Razor con RazorEngine v3.0?

preguntado el 03 de mayo de 12 a las 11:05

Oh, estás usando RazorEngine... Una cosa a tener en cuenta es que Razor no es MVC. Se ha trabajado mucho con el nuevo RazorEngine, pero Antaris ha estado muy ocupado últimamente. Deberías poder usar @inherits MvcTemplateBase<T> en la parte superior de su archivo para usarlo. -

Gracias por la sugerencia. Me doy cuenta de que Razor y MVC están separados, pero mi objetivo es usar las mismas plantillas de Razor de MVC dentro y fuera de la canalización normal de ASP.Net. La versión en NuGet no contiene una clase denominada MvcTemplateBase. La última versión de Git lo hace, pero no es genérica, es solo MvcTemplateBase. Si agrego una línea como @inherits RazorEngine.Razor.MvcTemplateBase, obtengo una excepción en TemplateService.SetModelExplicit quejándose de que el tipo de plantilla no tiene una propiedad llamada Modelo. ¿Ideas? -

1 Respuestas

La Layout propiedad y el Html el ayudante no es parte de TemplateBase, y la implementación de MvcTemplateBase que es parte de la última versión de RazorEngine (v3.4.1) parece incompleto (InitHelpers no parece inicializar los ayudantes?). Deberá crear su propia plantilla base que implemente estas características.

Como notó, las versiones v3+ no incluyen un Razor.SetBaseTemplate método. Puede establecer un tipo de plantilla base en la versión actual de la siguiente manera:

var config = new RazorEngine.Configuration.TemplateServiceConfiguration
    {
        BaseTemplateType = typeof(MyTemplateBase<>)
    };

using (var service = new RazorEngine.Templating.TemplateService(config))
{
    Razor.SetTemplateService(service);
    return MvcHtmlString.Create(Razor.Parse<TModel>(templateText, model));
}

Si necesita inicializar ayudantes, puede ser útil anular CreateInstance en una implementación personalizada de IActivator, que se puede proporcionar al TemplateServiceConfiguration como el BaseTemplateType:

var config = new RazorEngine.Configuration.TemplateServiceConfiguration
    {
        BaseTemplateType = typeof(MyTemplateBase<>),
        Activator = new MyActivator()
    };

contestado el 22 de mayo de 14 a las 06:05

Hmm, ¿qué versión de RazorEngine estás usando? ¿O derivó MvcTemplateBase como su propia clase? La fuente actual no tiene una versión genérica de MvcTemplateBase: github.com/Antaris/RazorEngine/blob/master/src/Web/… - chris moschini

Esa es una implementación local de MvcTemplateBase. El punto de lo anterior es demostrar que todavía puede de hecho, configure una plantilla base para heredar todas sus vistas, lo que le permitirá implementar el asistente Html, la funcionalidad de diseño base o cualquier cosa que necesite que TemplateBase de RazorEngine no ofrece de forma inmediata. - jdmcnair

Aclarado mi respuesta anterior. Anteriormente noté que esta pregunta tiene más de 2 años, pero creo que esto todavía la responde. Avísame si algo no está claro. Tal vez esto todavía ayude a alguien. - jdmcnair

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.