我有一个MVC项目,需要有2个不同的View文件夹。一个是~/Views/
,一个是~/Framework/Views/
。这是通过基于剃刀视图引擎创建自定义视图引擎来完成的,如下所示:
public class MyViewEngine : RazorViewEngine
{
private static string[] AdditionalViewLocations = new[]{
"~/Framework/Views/{1}/{0}.cshtml",
"~/Framework/Views/{1}/{0}.vbhtml",
"~/Framework/Views/Shared/{0}.cshtml",
"~/Framework/Views/Shared/{0}.vbhtml"
};
public MyViewEngine()
{
base.PartialViewLocationFormats = base.PartialViewLocationFormats.Union(AdditionalViewLocations).ToArray();
base.ViewLocationFormats = base.ViewLocationFormats.Union(AdditionalViewLocations).ToArray();
base.MasterLocationFormats = base.MasterLocationFormats.Union(AdditionalViewLocations).ToArray();
}
}
问题是我想在2个Views文件夹的每一个中使用不同的_ViewStart.cshtml文件(即~/Views/_ViewStart.cshtml
用于~/Views/
文件夹中的视图和~/Framework/Views/_ViewStart.cshtml
用于视图的视图在~/Framework/Views/
文件夹中找到,但View Engine只使用它找到的第一个~/Views/
中的原始文件。
这可能吗?
谢谢
答案 0 :(得分:6)
这绝对是可能的,我想你错过了什么。
我自己使用您提供的视图引擎(逐字复制和粘贴)对此进行了测试。我没有看到与你相同的行为。我有两个_ViewStart.cshtml
个文件,一个在~/Framework/Views/_ViewStart.cshtml
,一个在~/Views/_ViewStart.cshtml
。
当我在~/Framework/Views/
内运行视图时,它使用Framework文件夹中的_ViewStart.cshtml
。当我在~/Views/
内运行视图时,它会使用Views文件夹中的_ViewStart.cshtml
。
使用DotPeek仔细检查RazorViewEngine
中的代码也可以确认这是它应该如何表现的。视图引擎在与正在呈现的视图相同的文件夹中开始检入名为_ViewStart.cshtml
的文件,然后在目录树中向上走,直到它到达应用程序的根目录。
答案 1 :(得分:3)
_ViewStart
的选择是分层的,但您已将~/Framework/Views
与[{1}}平行添加。我认为Razor并不是真正做你想要的(即两个完全平行的视图位置)。如果您要将~/Views
放入主Framework
文件夹,那么您的Views
会正常加载。