2009-09-23 8 views
6

Lo que intento hacer es generar contenido de correo electrónico usando diferentes plantillas.¿Es posible con ASP.NET MVC representar una vista desde una plantilla extraída de una base de datos?

Creo que ASP.NET MVC podría ser una buena opción para esto. Mi controlador obtendría los datos necesarios para el correo electrónico y decidiría qué vista (plantilla) representar. (Es más que una simple combinación de correspondencia, debería haber bloques condicionales, foreach's, etc.)

Quiero ser capaz de almacenar estas plantillas en una base de datos en lugar de archivos en la aplicación web, por lo que las nuevas plantillas se pueden agregar fácilmente desde la propia aplicación web.

¿Esto es posible? Preferiría poder usar el motor de vistas de WebForms, pero consideraría otros motores de vistas si eso no es posible. Idealmente, me gustaría utilizar vistas escritas a máquina.

+1

Almacenar las plantillas en la base de datos es la parte fácil. Presentar una página de vista ASP.NET MVC fuertemente tipada a una cadena dentro de una acción de controlador podría ser más desafiante. –

+2

Terminé usando el motor de visualización NVelocity (http://nvelocity.codeplex.com/) para exactamente el mismo propósito. –

Respuesta

2

Desafortunadamente, WebForms ViewEngine utiliza algunas clases internas para compilar los archivos aspx y ascx, por lo que esto no es posible. Ese ViewEngine requiere que las Vistas estén disponibles como archivos en una carpeta dentro de la raíz del sitio (la carpeta virtual también funcionará IIRC).

Hay otros motores de visualización que pueden adaptarse mejor a su propósito, incluidos algunos que usan XSLT.

AFAIR es posible mezclar varios ViewEngines en la misma aplicación, por lo que podría usar el motor WebForms para sus páginas web normales y uno diferente para sus correos electrónicos.

+0

¿El WebForms ViewEngine requiere que las vistas ya estén compiladas en la aplicación? ¿O los compila en tiempo de ejecución? Lo que estoy preguntando es si sería posible a través de la reflexión acceder a estas clases internas y compilar una vista del contenido que proporciono en tiempo de ejecución.Todavía no he mirado el funcionamiento interno del motor de visualización. – sectrean

+0

Compila las vistas en tiempo de ejecución. Incluso si pudiera usar el reflejo para compilarlos en el tiempo de ejecución, no será trivial, ya que gran parte está cableada para compilarse desde archivos ... Aunque es posible ... –

+0

Represento Vistas guardadas en el base de datos utilizando proveedores de archivos virtuales y un motor de visualización personalizado del capatante de datos usando Razor. Razor puede ejecutarse independientemente, pero obviamente la implementación es estricta. es decir, sin ViewBag – ppumkin

2

Puede usar múltiples motores de vista en la misma aplicación. El marco le preguntará a cada uno de los motores si es capaz de representar la vista solicitada. Compruebe MvcContrib para otros motores de vista disponibles ...

Como se indicó en la respuesta anterior, WebForms ViewEngine asume que las vistas (aspx, ascx) se almacenan físicamente en el sistema de archivos, al igual que ASP.NET (aunque en ASP.NET tienes algo como el VirtualPathProvider) que fue, creo, originalmente agregado al framework para soportar por ejemplo SharePoint).

Si desea crear su propio motor de visualización, debe implementar IViewEngine y agregar el motor de vista a la colección de ViewEngines, p. en Application_Start.

1

Phil Haack tiene un great article en algo similar aquí.

Creo que se podría adaptar a sus necesidades.

Bondad,

Dan

0

usted tiene que crear sus viewengine y así su BuildManager. Su viewengine puede simplemente recuperar la parte aspx de un DB e invocar el motor de formulario web. No es fácil pero factible, en su mayoría depende de qué tan mal lo necesite y cómo lo recompensará con un buen retorno de la inversión.

Cuestiones relacionadas