为了在我的新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
子文件夹作为一个地点。这也意味着我可以通过名称而不是完整路径来引用视图。
但是,我仍然收到一个错误,即在任何搜索位置都找不到局部视图。
任何帮助都将不胜感激。
谢谢!
答案 0 :(得分:1)
我认为指定.chstml
扩展名是问题所在,请尝试在没有它的情况下返回视图:
return PartialView("ListUsers", Model);