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

Cha*_*ala 6 viewengine asp.net-mvc-3

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

Mar*_*urg 6

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

多个视图引擎绝对可以并排运行.如果你不希望在特定情况下,你要使用你的视图引擎不return new ViewEngineResult(new string[0]);FindViewFindPartialView和MVC会选择另一种视图引擎.如果您确实希望使用视图引擎,则返回指向要渲染结果的视图类(即实现IView)的有效ViewEngineResult.

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