如果我在ViewEngines集合中有多个引擎,MVC3如何选择使用哪个ViewEngine?

时间:2011-11-27 09:49:08

标签: asp.net-mvc-3 viewengine

我有一个内部开发的自定义视图引擎。在同一个项目中,我想将Razor用于某些页面,将我的自定义引擎用于某些页面。 MVC框架如何选择使用哪个引擎?顺便说一下,我的自定义引擎不需要任何模板,它根据数据库中的元数据呈现页面。对于我的自定义引擎,我不想设置任何模板文件。 我期待的是应该有一种方法来驱动框架使用基于控制器名称和操作名称的特定引擎。 这种灵活性是否存在于MVC3中?

2 个答案:

答案 0 :(得分:6)

您的视图引擎应实现IViewEngine界面。在使用ViewEngines.Engines.Add()方法注册视图引擎后,只要需要视图引擎来呈现视图,MVC框架就会调用FindViewFindPartialView

多个视图引擎绝对可以并排运行。如果您不希望在特定情况下使用视图引擎return new ViewEngineResult(new string[0]);FindView,则MVC将选择其他视图引擎。如果您确实希望使用视图引擎,则返回一个有效的ViewEngineResult,指向您想要IView结果的视图类(即实现Render)。

FindPartialView参数有一些细节。如果您想了解更多信息,可以通过Louis DeJardin在TechEd 2011上构建自己的视图引擎。您可以在Channel9找到Writing an ASP.NET MVC View Engine的视频。

答案 1 :(得分:0)

我认为最简单的方法是实施IViewPageActivatorhttp://bradwilson.typepad.com/blog/2010/10/service-location-pt11-view-page-activator.htmlhttp://msdn.microsoft.com/en-us/library/system.web.mvc.iviewpageactivator(v=vs.98).aspx

我认为从Create方法返回null会使其后来默认为默认IViewPageActivator。您将其注入DependencyResolverhttp://bradwilson.typepad.com/blog/2010/10/service-location-pt5-idependencyresolver.html

如果您使用依赖注入框架作为NInject或Unity,则可能更容易使用。