在自定义视图引擎中使用子文件夹
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);
为了在我的新 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);