Asp.net mvc 3 在搜索视图时,我可以交错使用两个MVC视图引擎吗?

Asp.net mvc 3 在搜索视图时,我可以交错使用两个MVC视图引擎吗?,asp.net-mvc-3,razor,webforms,viewengine,Asp.net Mvc 3,Razor,Webforms,Viewengine,我在MVC项目中使用WebForms和Razor视图引擎。他们合作得很好。但是,我设置了一个基于继承的项目,因此我有多个子项目是从一个基础项目派生的。只要有一个视图引擎,MVC就会在子项目中搜索视图,如果找不到,它就会搜索基本视图 但是,当添加第二个视图引擎时,此搜索模式被破坏,因此WebForms引擎搜索子视图,然后搜索基视图,然后Razor引擎搜索子视图,然后搜索基视图。因此,base.aspx视图将优先于child.cshtml视图。换句话说,在搜索名为MyView的视图时,这是已搜索位置

我在MVC项目中使用WebForms和Razor视图引擎。他们合作得很好。但是,我设置了一个基于继承的项目,因此我有多个子项目是从一个基础项目派生的。只要有一个视图引擎,MVC就会在子项目中搜索视图,如果找不到,它就会搜索基本视图

但是,当添加第二个视图引擎时,此搜索模式被破坏,因此WebForms引擎搜索子视图,然后搜索基视图,然后Razor引擎搜索子视图,然后搜索基视图。因此,base.aspx视图将优先于child.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

这可能吗?如果可能,有人能给我指出正确的方向吗?

您可以编写自己的视图引擎,在内部使用两个现有的视图引擎

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
            }

        }
    }

}