在搜索视图时,我可以交错两个MVC视图引擎吗?

时间:2011-10-21 20:20:26

标签: asp.net-mvc-3 razor webforms viewengine

我在我的MVC项目中使用WebForms和Razor视图引擎。他们一起工作很好。但是,我有一个基于继承的项目设置,因此我有一个从基础项目派生的多个子项目。只有一个视图引擎,这可以使MVC在子项目中搜索一个视图,如果找不到它,它将搜索基础。

然而,当添加第二个视图引擎时,此搜索模式被破坏,以便WebForms引擎搜索子项,然后搜索基础,然后Razor引擎搜索子项,然后搜索基础。因此,基本.aspx视图将优先于子.cshtml视图。换句话说,当搜索名为MyView的视图时,这是搜索到的位置的优先级列表:

Child\MyView.aspx
Base\MyView.aspx
Child\MyView.cshtml
Base\MyView.cshtml

我想要的是让两个引擎在检查基础项目之前检查子项目,如下:

Child\MyView.aspx
Child\MyView.cshtml
Base\MyView.aspx
Base\MyView.cshtml

这是否可能,如果是这样,有人可以指出我正确的方向吗?

1 个答案:

答案 0 :(得分:0)

您可以编写自己的内部使用现有视图引擎的视图引擎。

public InterleavedViewEngine : IViewEngine
{
    public string[] SearchLocations;

    RazorViewEngine _razor;
    WebFormsViewEngine _webForms;

    public override ViewEngineResult FindView(...)
    {
        //iterate search paths, trying Razor, then WebForms, etc...
        foreach(var location in SearchLocations)
        {
            var razorResult = _razor.FindView(...);

            if(razorResult.View == null)
            {
               //web forms, etc... here
            }

        }
    }

}