确定。谷歌搜索失败可能,我记得有一段时间读这个,但找不到它。
我在不同的目录中有一个视图和一个部分视图。在一个视图中,我说@Html.RenderPartial("[partial view name]");
RenderPartial如何找出在哪里看?它必须是一个惯例,但它是什么?
我的观点位于:WebRoot\Views\Admin\
文件夹,部分位于WebRoot\Views\Admin\Partials
不确定这是否正确设置。
我正在使用MVC 3(Razor引擎)
答案 0 :(得分:4)
你可以,但你必须注册路线,告诉视图引擎在哪里寻找。您可以在Global.asax.cs中找到示例:
ViewEngines.Engines.Add(new RDDBViewEngine());
,班级是:
public class RDDBViewEngine : RazorViewEngine
{
private static string[] NewPartialViewFormats = new[] {
"~/Views/Shared/Partials/{0}.cshtml" ,
"~/Views/{0}.cshtml"
};
public RDDBViewEngine()
{
base.PartialViewLocationFormats = base.PartialViewLocationFormats.Union(NewPartialViewFormats).ToArray();
}
}
{0} 适用于所有带有partials的子文件夹。
答案 1 :(得分:3)
定位视图是ViewEngine的责任。 WebFormViewEngine最初是随MVC 1一起提供的,您可以看到它搜索的路径on codeplex。请注意,它会在相同的路径中搜索视图和部分视图。
与MVC 3(或更确切地说是WebMatrix)一起引入的CshtmlViewEngine(Razor)会搜索类似的位置,但会查找不同的扩展名。
答案 2 :(得分:1)
在您的应用程序中注册的每个视图引擎都有一个文件模式列表,当您使用简单名称引用视图时,将会搜索该文件模式(您也可以使用完整路径引用它,例如~\Views\Admin\View.aspx
)
在MVC 3中,properties of the view engine指定要搜索的模式(这适用于Razor和WebForms视图引擎)。
答案 3 :(得分:1)
您可以只更改现有的RazorViewEngine的PartialViewLocationFormats属性,而不是继承RazorView引擎(如zdrsh所建议的那样)。此代码位于Application_Start:
System.Web.Mvc.RazorViewEngine rve = (RazorViewEngine)ViewEngines.Engines
.Where(e=>e.GetType()==typeof(RazorViewEngine))
.FirstOrDefault();
string[] additionalPartialViewLocations = new[] {
"~/Views/[YourCustomPathHere]"
};
if(rve!=null)
{
rve.PartialViewLocationFormats = rve.PartialViewLocationFormats
.Union( additionalPartialViewLocations )
.ToArray();
}