我是MVC的新手,非常好奇,知道如何更改视图和部分视图位置.
我们知道视图文件夹中的视图和部分视图存储.如果我的控制器名称是home,则视图必须存储在视图文件夹内的主文件夹中,并且所有parial视图存储在共享文件夹中.我想知道如何更改查看和部分查看默认位置?
1)假设我的控制器名称是产品,但我想在myproduct文件夹中存储相应的视图.......指导我需要做什么才能使一切正常.
2)我想将所有局部视图存储在视图文件夹内的部分文件夹中,并希望从那里加载所有局部视图.所以指导我需要做些什么来使一切正常.
basicall我怎么能指示控制器从我的文件夹加载视图和部分视图而不提路径.寻找好的讨论.谢谢
Dav*_*trg 10
如果您想要特定控制器的特殊视图位置,在您的情况下,您希望ProductController视图转到MyProduct文件夹,您需要覆盖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);
}
}
Run Code Online (Sandbox Code Playgroud)
如果你想在每个控制器视图文件夹中加上"我的",那么你的视图引擎应该是这样的
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();
}
}
Run Code Online (Sandbox Code Playgroud)
而不是你的Global.asax
protected void Application_Start()
{
//remove unused view engines, for performance reasons as well
ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(new MyRazorViewEngine());
}
Run Code Online (Sandbox Code Playgroud)
您可以修改RazorViewEngine
的ViewLocationFormats
和PartialViewLocationFormats
性能在Global.asax中的启动代码.下面的代码应该有效:
protected void Application_Start(object obj, EventArgs e)
{
var engine = ViewEngines.Engines.OfType<RazorViewEngine>().Single();
var newViewLocations = new string[] {
"~/SomeOtherFolder/{1}/{0}.cshtml",
"~/GlobalFolder/{0}.cshtml"
};
engine.ViewLocationFormats = newViewLocations;
engine.PartialViewLocationFormats = newViewLocations;
}
Run Code Online (Sandbox Code Playgroud)
IIRC,{1}将对应于控制器,{0}对应于查看名称,您可以查看现有属性以确保.
如果要保留现有搜索位置,则需要将它们复制到新阵列中.
归档时间: |
|
查看次数: |
5833 次 |
最近记录: |