除了默认文件夹之外,告诉Razor查找特定文件夹中的部分内容

时间:2012-04-30 15:17:31

标签: asp.net-mvc razor

在Razor中,我有一些位于"~/areas/shared/views/shared/_partialName.cshtml"。如果我在视图中只是@{ Html.RenderPartial("_partialName", myModel"); },则无法找到它。相反,我必须完全限定通往该部分的路径。

我是否可以告诉我的项目在尝试查找部分文件时将文件夹"~/areas/shared/views/shared/"包含在其抓取的文件夹列表中?通过这种方式,我可以在我的视图中保留代码片段,以呈现部分优秀和简短。谢谢!

1 个答案:

答案 0 :(得分:0)

RazorViewEngine类包含的属性具有应该查找各种视图文件的模式 - 区域,部分,所有内容。您可以非常轻松地覆盖它,并告诉您在Globals.asax中的应用程序使用您的实现:

public class MyViewEngine : RazorViewEngine
{
    public MyViewEngine()
    {
        // Use the standard partials location in addition to this location
        // {0} is the partial view name, {1} is the controller name
        String[] morePartialLocations = new String[] {
            "~/areas/shared/views/shared/{0}.cshtml"
        };
        PartialViewLocationFormats =
            PartialViewLocationFormats.Concat(morePartialLocations).ToArray();
    }
}

// in Globals.asax

protected void Application_Start()
{
    ...
    ViewEngines.Engines.Clear();
    ViewEngines.Engines.Add(new MyViewEngine());
    ...
}

请注意,由于听起来您正在使用区域,因此您可以覆盖另一个名为AreaViewLocationFormats的属性,您可以以相同的方式更新该属性并插入“{2}”作为区域的名称