Ce que j'essaye de faire est de générer du contenu par courrier électronique en utilisant différents modèles. p>
Je pense que ASP.NET MVC pourrait être un bon ajustement pour cela. Mon contrôleur obtiendrait les données nécessaires pour l'email et déciderait quelle vue (modèle) à rendre. (C'est plus que juste une simple fusion de courrier, il faudrait être des blocs conditionnels, de pourbes, etc.) p>
Je veux pouvoir stocker ces modèles dans une base de données plutôt que sous forme de fichiers de l'application Web, de nouveaux modèles peuvent donc être facilement ajoutés à partir de l'application Web elle-même. p>
est-ce possible? Je préférerais pouvoir utiliser le moteur de vue WebForms, mais j'envisagerais d'autres moteurs d'affichage si cela n'est pas possible. J'aimerais idéalement utiliser des vues tycres. P>
4 Réponses :
Malheureusement, le site WebFormengine utilise des classes internes pour compiler les fichiers ASPX et ASCX, ce qui n'est donc pas possible. Ce viewEngine exige que les vues soient disponibles en tant que fichiers dans un dossier à l'intérieur de la racine du site (le dossier virtuel fonctionnera également IIRC). P>
Il existe d'autres fenêtres qui peuvent mieux adapter votre objectif, y compris certaines qui utilisent XSLT. P>
Afair Il est possible de mélanger plusieurs viewengines dans la même application. Vous pouvez donc utiliser le moteur WebForms pour vos pages Web normales et une autre pour vos courriels. P>
Donc, le site WebFormengine nécessite-t-il que les vues doivent déjà être compilées dans l'application? Ou cela les compile-t-il au moment de l'exécution? Ce que je reçois est s'il serait peut-être possible d'accéder à ces classes internes et de compiler une vue du contenu que je fournis au moment de l'exécution. Je n'ai pas encore regardé le fonctionnement intérieur du moteur de vue moi-même.
Il compile les vues au moment de l'exécution. Même si vous pouviez utiliser la réflexion pour les compiler au moment de l'exécution, cela ne sera pas trivial, autant qu'il est difficile de compiler des fichiers ... Cela peut être possible si ...
Je rends des vues enregistrées dans la base de données à l'aide de fournisseurs de fichiers virtuels et d'une vue personnalisée de la Datalayer à l'aide de Razor. Razor peut fonctionner de manière indépendante mais évidemment la mise en œuvre est stricte. c'est-à-dire non-ViewBag
Vous pouvez en effet utiliser plusieurs moteurs d'affichage dans la même application. Le cadre demandera à chacun des moteurs s'il est capable de rendre la vue demandée. Vérifiez MVCConTrib pour d'autres moteurs de vue disponibles ... P>
Comme indiqué dans la réponse précédente, la vue WebFormengine fait l'hypothèse que les vues (ASPX, ASCX) sont stockées physiquement sur le système de fichiers, tout comme ASP.NET (bien que dans ASP.NET, vous avez quelque chose comme le < un href = "http://msdn.microsoft.com/en-us/library/system.web.hosting.virtualpathprovider.aspx" rel = "nfollow noreferrer"> VirtualPathProvider ) C'était - je crois - à l'origine ajouté au cadre pour soutenir par exemple SharePoint). P>
Si vous souhaitez créer votre propre moteur d'affichage, vous devez implémenter IViewengine et ajouter le moteur de vue à la collection Viewengines. dans application_start. p>
Phil HAACK a un Excellent article sur quelque chose de similaire ici. P>
Je pense que cela pourrait être adapté à vos besoins. P>
gentillesse, p>
dan p>
Vous devez créer votre viewEngine et votre BuildManager. Votre viewEngine peut simplement récupérer la partie ASPX à partir d'un DB et appeler le moteur WebForm. Pas facile mais faisable, cela dépend principalement de la gravité de la taille et de la façon dont vous vous récrocherez avec un joli retour sur investissement. P>
Le stockage des modèles dans la base de données est la partie facile. Rendu une page de vue ASP.NET MVC fortement dactylographiée à une chaîne à l'intérieur d'une action du contrôleur pourrait être plus difficile.
J'ai fini par utiliser Nelvelocity View Engine ( nvelocity.codeplex.com ) pour exactement le même objectif.