我正在使用 Razor 引擎来呈现我的视图,并且我想对其进行一些自定义以获得与默认行为不同的行为。
对于后面的相同数据,我有不同的视图,我想重用它们,但我要在外部指定子文件夹的更改。
所以这是树:
- 意见
- 1
- 控制器名称
- 文件.cshtml
- 共享
- _Layout.cshtml
- 控制器名称
- 2
- 控制器名称
- 文件.cshtml
- 共享
- _OtherLayout.cshtml
- 控制器名称
- 等等
- 1
唯一不同的是子文件夹,其他一切都是一样的(除了cshtml文件的内容^^)。如何根据我的意愿切换到正确的文件夹?
我的第一种方法(实际上并不成功)是创建一个 CustomViewEngine(然后在 Global.asax 中调用它),但现在我得到了 404。(id 将在稍后使用 ViewBag 设置为动态)
public class CustomViewEngine : RazorViewEngine
{
public CustomViewEngine()
{
ViewLocationFormats = new[]
{
"~/Views/%1//{1}/{0}.cshtml",
"~/Views/%1//Shared/{0}.cshtml"
};
MasterLocationFormats = new[]
{
"~/Views/%1/{1}/{0}.cshtml",
"~/Views/%1/Shared/{0}.cshtml",
};
PartialViewLocationFormats = new[]
{
"~/Views/%1/{1}/{0}.cshtml",
"~/Views/%1/Shared/{0}.cshtml"
};
}
protected override IView CreatePartialView(ControllerContext controllerContext, string partialPath)
{
var id = "1";
return base.CreatePartialView(controllerContext, partialPath.Replace("%1", id));
}
protected override IView CreateView(ControllerContext controllerContext, string viewPath, string masterPath)
{
var id = "1";
return base.CreateView(controllerContext, viewPath.Replace("%1", id), masterPath.Replace("%1", id));
}
protected override bool FileExists(ControllerContext controllerContext, string virtualPath)
{
var id = "1";
return base.FileExists(controllerContext, virtualPath.Replace("%1", id));
}
}