我有一个MVC项目,需要有2个不同的视图文件夹。一个在~/Views/
,另一个在~/Framework/Views/
。这是基于这样的Razor视图引擎创建自定义视图引擎来完成:ASP.NET MVC:多视图文件夹和_ViewStart.cshtml文件
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();
}
}
的问题是,我想使用一个不同的_ViewStart.cshtml文件在每个2个浏览文件夹(即~/Views/_ViewStart.cshtml
为在~/Views/
文件夹中找到的视图,在~/Framework/Views/
文件夹中找到的视图为~/Framework/Views/_ViewStart.cshtml
),但View Engine只是使用它找到的第一个,它是~/Views/
中的第一个。
这可能吗?
谢谢
为什么不使用区域而不是搞乱视图引擎? – 2013-03-07 23:00:31
这绝对是可能的 - 事实上,我只是使用您提供的视图引擎在我的机器上将其复制并粘贴。 我看不到和你一样的行为。我有两个_ViewStart文件,一个在〜/ Framework/Views/_ViewStart.cshtml,另一个在〜/ Views/_ViewStart.cshtml。当我在〜/ Framework/Views /中运行视图时,它使用框架_ViewStart。当我在〜/ Views /中运行视图时,它在那里使用_ViewStart。 使用DotPeek双重检查RazorViewEngine中的代码也证实了它应该如何表现。你确定你没有错过什么吗? – 2013-03-07 23:32:44
@NickAceves:谢谢你是对的。我的文件保存在错误的位置,错误文件的副本保存在正确的位置!什么是dooch!再次感谢。 (把它放在答案中,我会标记它) – hofnarwillie 2013-03-08 09:55:58