2011-11-21 20 views
7

Me gustaría usar el motor Razor sin archivos de vista (cshtml), pero en cadenas. quiero hacerlo desde dentro de MVC, que he visto ejemplos que utilizanUso del motor Razor en cadenas - no vistas

new RazorViewEngine().Render 

pero no puedo encontrar el método Render, es que algo de los días anteriores de MVC?

También he visto ejemplos que utilizan Razor.Parse, pero yo no lo encuentro bien - probablemente falta una referencia (pero debe estar allí si estoy usando MVC ya, ¿verdad?)

¿Es aconsejable utilizar Razor si todo lo que necesito hacer es inyectar 3-4 parámetros en una cadena HTML? Creo que estoy un poco encaprichado con MVC en este momento y puede que no esté pensando bien. Estoy planeando almacenar en caché las cadenas HTML en la memoria y simplemente transferir modelos de DB.

Gracias

Respuesta

3

Usted puede echar un vistazo a RazorEngine.

+0

Esto parece un poco exagerado. Me parece que debería poder hacer esto sin una biblioteca externa tan grande, pero se ve muy bien. Sin embargo, al mirar su [publicación de blog] (http://www.fidelitydesign.net/?p=473) acerca de la versión 3, no quiero probar la versión actual, porque necesito ejecutarla en un multiproceso entorno y (con suerte) compatibilidad con el almacenamiento en caché de la plantilla – Madd0g

+0

@ Madd0g, ¿cuál es su situación? Tal vez hay cosas más adaptadas para satisfacer sus necesidades. –

+0

Tengo una lista de plantillas HTML con marcadores de posición en ellas, cada una está asociada a un conjunto de reglas, se guardan en un DB. Eventualmente, estas plantillas se aplicarán a los datos que cumplan con algunas condiciones (y las reglas). Preferiblemente, toda la plantilla se almacena en caché para que maneje los datos rápidamente. Tiene que funcionar como una vista parcial, solo que más "dinámicamente". – Madd0g

5

Para utilizar el RazorEngine a analizar cadenas, necesitará el RazorEngine.dll, que se puede descargar desde http://razorengine.codeplex.com/

Para analizar una cadena con el motor de la maquinilla de afeitar sólo tiene que utilizar el siguiente ejemplo:

var model = new { Name = "Test" }; 
var template = "Hello @Model.Name"; 

var result = Razor.Parse(template, model); 

En cuanto a si es aconsejable usarlo para analizar una cadena, realmente depende de para qué lo esté utilizando. Si cree que va a necesitar la flexibilidad que ofrece Razor, lo recomendaría, pero tiene un poco de rendimiento al compararlo con un reemplazo de cadena estándar.

+0

Lo estoy usando para gestionar vistas fuera del proyecto: me importa el rendimiento, ya que espero muchas (20? 50?) llama a estas plantillas en una sola vista de página, es por eso que su publicación en el blog sobre los cambios en la nueva versión me da miedo de probar la anterior, que dicen que no funciona muy bien en entornos de subprocesos múltiples (web probablemente cae en esta categoría, ¿no?) – Madd0g

+0

Sí, probablemente no sea una buena idea para lo que estás tratando de lograr. –

0

Hay un RazorParser class con Parse method que toma TextReader como parámetro de entrada. Sin embargo toda System.Web.Razor.Parser namespace se marca como

Este tipo/miembro admite la infraestructura de .NET Framework y no es destinado a ser utilizado directamente desde el código.

por lo que tiene que resolverlo usted mismo.

Cuestiones relacionadas