【发布时间】:2013-02-23 08:06:45
【问题描述】:
我有一个 MVC 项目,需要有 2 个不同的 View 文件夹。一个在~/Views/,一个在~/Framework/Views/。这是通过创建一个基于 razor 视图引擎的自定义视图引擎来完成的,如下所示:
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/ 中找到的视图文件夹),但是视图引擎只使用它找到的第一个,它是 ~/Views/ 中的原始文件夹。
这样可以吗?
谢谢
【问题讨论】:
-
为什么不使用区域而不是使用视图引擎?
-
这绝对是可能的 - 事实上,我只是使用您提供的视图引擎在我的机器上将它搅打起来,只是复制和粘贴。我没有看到与您相同的行为。我有两个 _ViewStart 文件,一个在 ~/Framework/Views/_ViewStart.cshtml,一个在 ~/Views/_ViewStart.cshtml。当我在 ~/Framework/Views/ 中运行视图时,它使用 Framework _ViewStart。当我在 ~/Views/ 中运行视图时,它使用 _ViewStart 那里。使用 DotPeek 仔细检查 RazorViewEngine 中的代码也确认这是它应该的行为方式。你确定你没有遗漏什么吗?
-
@NickAceves:谢谢你是对的。我的文件保存在错误的位置,并且错误文件的副本保存在正确的位置!真是个混蛋!再次感谢。 (把它放在答案中,我会标记它)
标签: asp.net-mvc asp.net-mvc-3 razor viewengine