ASP.NET MVC可以通过从数据库中提取的模板呈现视图吗?

问题描述:

我想要做的是使用不同的模板生成电子邮件内容。ASP.NET MVC可以通过从数据库中提取的模板呈现视图吗?

我认为ASP.NET MVC可能是一个非常适合这个。我的控制器将获得电子邮件的必要数据并决定渲染哪个视图(模板)。 (更多的只是简单的邮件合并,需要有条件的块,foreach等)

我希望能够将这些模板存储在数据库中而不是作为Web应用程序中的文件,所以新的模板可以很容易地从Web应用程序本身添加。

这可能吗?我宁愿能够使用WebForms视图引擎,但如果这是不可能的,会考虑其他视图引擎。我最好喜欢使用输入视图。

+1

将模板存储在数据库中是很容易的部分。将强类型的ASP.NET MVC视图页面呈现为控制器操作中的字符串可能更具挑战性。 – 2009-09-23 20:15:26

+2

为了达到完全相同的目的,我最终使用了NVelocity视图引擎(http://nvelocity.codeplex.com/)。 – 2009-09-23 20:17:15

不幸的是,WebForms的视图引擎使用一些内部类编译ASPX和ASCX文件,所以这是不可能的。该ViewEngine要求视图可以作为站点根目录内的文件夹中的文件(虚拟文件夹也可以工作IIRC)。

有可能更适合你的目的的其他ViewEngines,包括一些使用XSLT。

AFAIR有可能在同一个应用程序混合一些ViewEngines,所以你可以使用你的正常网页中的WebForms引擎,以及一个不同的电子邮件。

+0

那么WebForms ViewEngine是否需要已经在应用程序中编译视图?还是在运行时编译它们? 我得到的是如果它可能通过反射来访问这些内部类并编译我在运行时提供的内容的视图。我还没有看过视图引擎的内部工作。 – sectrean 2009-09-23 21:57:55

+0

它在运行时编译视图。即使你可以在运行时使用反射来编译它们,它也不会是微不足道的,因为它可以通过硬件来编译文件...尽管如此,这可能是可能的...... – 2009-09-24 04:41:17

+0

我渲染视图保存在使用虚拟文件提供程序的数据库以及使用Razor从Datalayer自定义viewEngine。剃刀可以独立运行,但显然执行是严格的。即没有ViewBag – ppumkin 2014-07-29 09:54:10

你确实可以在同一个应用程序中使用多个视图引擎。该框架将询问每个引擎是否能够呈现请求的视图。检查MvcContrib其他可用的视图引擎...

正如前面的答案所述,WebForms ViewEngine假设视图(aspx,ascx)物理存储在文件系统上,就像ASP.NET一样(虽然在ASP.NET中你有类似于VirtualPathProvider),我相信 - 最初加入到框架来支持例如的SharePoint)。

如果你想创建自己的视图引擎,你应该实现IViewEngine,并添加视图引擎的ViewEngines集合例如在Application_Start中。

菲尔哈克有类似的东西在这里一个great article

我认为它可以适应您的需求。

善良,

你必须创建视图引擎等你buildmanager。您的viewengine可以简单地从数据库中检索aspx部分并调用webform引擎。不容易,但可行,它主要取决于你需要这种多么糟糕,它将如何以良好的投资回报率奖励你。