2009-09-23 13 views
6

Quello che sto cercando di fare è generare contenuto di posta elettronica utilizzando diversi modelli.È possibile con ASP.NET MVC eseguire il rendering di una vista da un modello estratto da un database?

Penso che ASP.NET MVC potrebbe essere una buona soluzione per questo. Il mio controller otterrebbe i dati necessari per l'email e deciderà quale vista (modello) renderizzare. (È più che una semplice unione di posta, ci dovrebbero essere blocchi condizionali, foreach, ecc.)

Desidero essere in grado di memorizzare questi modelli in un database anziché come file nell'applicazione Web, quindi nuovi modelli possono essere facilmente aggiunti dall'applicazione web stessa.

È possibile? Preferirei poter utilizzare il motore di visualizzazione WebForms, ma prenderei in considerazione altri motori di visualizzazione se ciò non è possibile. Preferirei usare le viste digitate.

+1

La memorizzazione dei modelli nel database è la parte facile. Il rendering di una pagina di visualizzazione ASP.NET MVC fortemente tipizzata su una stringa all'interno di un'azione del controller potrebbe essere più impegnativo. –

+2

Ho finito per utilizzare il motore di visualizzazione NVelocity (http://nvelocity.codeplex.com/) per lo stesso identico scopo. –

risposta

2

Sfortunatamente, il ViewFile WebForm utilizza alcune classi interne per compilare i file aspx e ascx, quindi questo non è possibile. Quel ViewEngine richiede che le Viste siano disponibili come file in una cartella all'interno della radice del sito (la cartella virtuale funzionerà anche IIRC).

Ci sono altri ViewEngines che possono adattarsi meglio al tuo scopo, inclusi quelli che usano XSLT.

AFAIR è possibile combinare più ViewEngines nella stessa applicazione, quindi è possibile utilizzare il motore WebForms per le normali pagine Web e uno diverso per le e-mail.

+0

Quindi il ViewFile WebForm richiede che le viste siano già compilate nell'applicazione? O li compila in fase di esecuzione? Quello che sto ottenendo è se sarebbe possibile attraverso la riflessione accedere a queste classi interne e compilare una vista dal contenuto che fornisco in fase di esecuzione.Non ho ancora guardato il funzionamento interno del motore di visualizzazione. – sectrean

+0

Compila le viste in fase di esecuzione. Anche se si potesse usare la reflection per compilarli in fase di esecuzione, non sarebbe banale, dato che gran parte di essi è cablato per compilare da file ... Potrebbe essere possibile ... –

+0

I rendering Views salvati nel database utilizzando provider di file virtuali e una viewEngine personalizzata dal Datalayer che utilizza Razor. Il rasoio può funzionare indipendentemente, ma ovviamente l'implementazione è rigorosa. cioè senza ViewBag – ppumkin

2

È possibile utilizzare più motori di visualizzazione nella stessa applicazione. Il framework chiederà a ciascuno dei motori se è in grado di visualizzare la vista richiesta. Controllare MvcContrib per altri motori di visualizzazione disponibili ...

Come indicato nella risposta precedente, il WebForm ViewEngine fa presupporre che le viste (aspx, ascx) siano archiviate fisicamente sul file system, proprio come fa ASP.NET (sebbene in ASP.NET si abbia qualcosa come lo VirtualPathProvider) che era - credo - originariamente aggiunto al framework per supportare ad es. SharePoint).

Se si desidera creare il proprio motore di visualizzazione, è necessario implementare IViewEngine e aggiungere il motore di visualizzazione alla raccolta ViewEngines, ad es. in Application_Start.

1

Phil Haack ha uno great article su qualcosa di simile qui.

Penso che potrebbe essere adattato alle vostre esigenze.

Gentilezza,

Dan

0

devi creare il tuo viewengine e così il vostro BuildManager. Il tuo viewengine può semplicemente recuperare la parte aspx da un db e richiamare il motore webform. Non è facile ma fattibile, dipende in gran parte da quanto sia pessima questa cosa e come ti ricompenserà con un buon ROI.

Problemi correlati