RenderPartial如何找出查找视图的位置?

时间:2011-10-03 21:19:50

标签: asp.net-mvc asp.net-mvc-3 razor

确定。谷歌搜索失败可能,我记得有一段时间读这个,但找不到它。

我在不同的目录中有一个视图和一个部分视图。在一个视图中,我说@Html.RenderPartial("[partial view name]"); RenderPartial如何找出在哪里看?它必须是一个惯例,但它是什么?

我的观点位于:WebRoot\Views\Admin\文件夹,部分位于WebRoot\Views\Admin\Partials

不确定这是否正确设置。

我正在使用MVC 3(Razor引擎)

4 个答案:

答案 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();
}