我在我的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
这是否可能,如果是这样,有人可以指出我正确的方向吗?
答案 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
}
}
}
}