我正在使用Razor Engine来渲染我的视图,我想稍微自定义它以获得与默认行为不同的行为。
我有相同数据背后的不同视图,我想重用它们,但我要指定子文件夹的外部更改。
所以这是树:
唯一不同的是子文件夹,其他一切都是相同的(除了cshtml文件的内容^^)。如何根据我的意愿切换到正确的文件夹?
我的第一种方法(不是真的成功)是创建一个CustomViewEngine(然后在Global.asax中调用它),但现在我得到了404。 (稍后将使用ViewBag设置id为动态)
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));
}
}
答案 0 :(得分:0)
有三种方法可以做到这一点:
有一种方法可以使用一个好的代码示例look here来完成此操作。您的所有参数都通过了VirtualPathProviderViewEngine.cs
您可以在控制器操作中轻松使用视图路径:return View("~/stack/en/owerflow.cshtml")
你可以获得你的参数并与之前的技术相结合:return View(RouteData.Values["id"]+"/stackowerflow.cshtml")