我是MVC的新手,非常好奇,知道我怎么能改变观点&局部视图位置。
我们知道这个观点&视图文件夹中的局部视图存储。如果我的控制器名称是home,则视图必须存储在视图文件夹内的主文件夹中,并且所有parial视图存储在共享文件夹中。我想知道如何更改View&局部视图默认位置?
1)假设我的控制器名称是产品,但我想将相应的视图存储在myproduct文件夹中.......指导我需要做些什么来使一切正常。
2)我想将所有部分视图存储在视图文件夹内的部分文件夹中,并希望从那里加载所有局部视图。所以指导我需要做些什么来使一切正常。
basicall如何指示控制器加载视图&我的文件夹中的部分视图,没有提到路径。寻找好的讨论。感谢
答案 0 :(得分:10)
如果您想要特定控制器的特殊视图位置,在您的情况下,您希望ProductController视图转到MyProduct文件夹,则需要覆盖{{1}的FindView
和FindPartialView
方法}}:
RazorViewEngine
如果你想在每个控制器视图文件夹中加上“我的”,那么你的视图引擎应该是这样的
public class MyRazorViewEngine : RazorViewEngine
{
public override ViewEngineResult FindView(ControllerContext controllerContext, string viewName, string masterName, bool useCache)
{
if (controllerContext.Controller is ProductController)
{
string viewPath = "/Views/MyProduct/" + viewName + ".cshtml";
return base.FindView(controllerContext, viewPath, masterName, useCache);
}
return base.FindView(controllerContext, viewName, masterName, useCache);
}
public override ViewEngineResult FindPartialView(ControllerContext controllerContext, string partialViewName, bool useCache)
{
if (controllerContext.Controller is ProductController)
{
string partialViewPath = "/Views/MyProduct/Partials/" + partialViewName + ".cshtml";
return base.FindPartialView(controllerContext, partialViewPath, useCache);
}
return base.FindPartialView(controllerContext, partialViewName, useCache);
}
}
而不是你的Global.asax
public class MyRazorViewEngine : RazorViewEngine
{
public override ViewEngineResult FindView(ControllerContext controllerContext, string viewName, string masterName, bool useCache)
{
string viewPath = "/Views/My" + GetControllerName(controllerContext) + "/" + viewName + ".cshtml";
return base.FindView(controllerContext, viewPath, masterName, useCache);
}
public override ViewEngineResult FindPartialView(ControllerContext controllerContext, string partialViewName, bool useCache)
{
string partialViewPath = "/Views/My" + GetControllerName(controllerContext) + "/Partials/" + partialViewName + ".cshtml";
return base.FindPartialView(controllerContext, partialViewPath, useCache);
}
private string GetControllerName(ControllerContext controllerContext)
{
return controllerContext.RouteData.Values["controller"].ToString();
}
}
答案 1 :(得分:9)
您可以在Global.asax启动代码中修改RazorViewEngine
的{{1}}和ViewLocationFormats
属性。下面的某些内容应该有效:
PartialViewLocationFormats
IIRC,{1}对应控制器,{0}对应名称,您可以查看现有属性以确保。
如果您想保留现有的搜索位置,则需要将它们复制到新阵列中。