我有一个 MVC 项目,需要有 2 个不同的 View 文件夹。一个是在 ~/Views/
和一个在 ~/Framework/Views/
.这是通过创建一个基于 razor View 引擎的自定义 View 引擎来完成的,如下所示:
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 个 View 文件夹中的每一个中使用不同的 _ViewStart.cshtml 文件(即
~/Views/_ViewStart.cshtml
用于在 ~/Views/
文件夹中找到的 View 和 ~/Framework/Views/_ViewStart.cshtml
用于在 ~/Framework/Views/
文件夹中找到的 View ),然而, View 引擎只使用它找到的第一个,它是 ~/Views/
中的原始 View 。 .这是可能的吗?
谢谢
最佳答案
这绝对是可能的,我想你只是错过了一些东西。
我已经使用您提供的 View 引擎(逐字复制和粘贴)自己对此进行了测试。我没有看到和你一样的行为。我有两个 _ViewStart.cshtml
文件,一个在 ~/Framework/Views/_ViewStart.cshtml
,还有一个在 ~/Views/_ViewStart.cshtml
.
当我在 ~/Framework/Views/
内运行 View 时,它使用 _ViewStart.cshtml
在框架文件夹中。当我在 ~/Views/
内运行 View 时,它使用 _ViewStart.cshtml
在 View 文件夹中。
仔细检查 RazorViewEngine
中的代码使用 DotPeek 也证实了这正是它应该表现的方式。 View 引擎开始检入名为 _ViewStart.cshtml
的文件。在与正在呈现的 View 相同的文件夹中,然后沿着目录树向上走,直到它到达应用程序的根目录。
关于asp.net-mvc - ASP.NET MVC : Multiple View Folders and _ViewStart. cshtml 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15282823/