在自定义视图引擎中使用子文件夹

Working with subfolders in custom view engine

为了在我的新 MVC 5 应用程序中组织我的视图,我设置了如下文件夹结构:

Views
|-- Account
|   |-- Partials
|       |-- EditUser.cshtml
|       |-- ListUsers.cshtml
|   |-- Home.cshtml
|
|-- Admin
    |-- Partials
        |-- AnotherPartialView.cshtml

现在,我想为此实现一个自定义视图引擎,这样我就不必在我的主视图文件夹中一直指定 Partials 文件夹的完整路径。

我创建了一个像这样的自定义视图引擎:

public class CustomViewEngine : RazorViewEngine
{
    public CustomViewEngine()
        : base()
    {

        var viewLocations = new[] {  
            "~/Views/{1}/{0}.cshtml",  
            "~/Views/Shared/{0}.cshtml",  
            "~/Views/{1}/Partials/{0}.cshtml"

        };

        this.PartialViewLocationFormats = viewLocations;
        this.ViewLocationFormats = viewLocations;


    }
}

并在 Global.asax

内在 Application_Start() 注册
protected void Application_Start()
{
    /* snip */
    ViewEngines.Engines.Add(new CustomViewEngine());
}

编辑:

我这样调用部分视图:

[HttpGet]
/// http://localhost/Account/ListUsers
/// View is located in ~/Views/Account/Partials/ListUsers.cshtml
public ActionResult ListUsers()
{
    /* populate model */

    return PartialView("ListUsers.cshtml", Model);
}

我的想法是,如果我在视图位置中包括控制器参数 {1} 后跟 Partials 文件夹,这将不再需要每个 Partials 子文件夹作为一个位置。这也意味着我可以仅通过名称而不是其完整路径来引用视图。

但是,我仍然收到在任何搜索位置都找不到局部视图的错误消息。

如有任何帮助,我们将不胜感激。

谢谢!

我认为指定 .chstml 扩展名是个问题,请尝试在没有它的情况下返回视图:

return PartialView("ListUsers", Model);