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

时间:2016-10-25 20:51:09

标签: c# asp.net-mvc-5 viewengine

为了在我的新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子文件夹作为一个地点。这也意味着我可以通过名称而不是完整路径来引用视图。

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

任何帮助都将不胜感激。

谢谢!

1 个答案:

答案 0 :(得分:1)

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

return PartialView("ListUsers", Model);