到目前为止,我使用了ASP.NET MVC v1和v2下面的代码,但是当我今天在我的应用程序中添加了一个区域时,该区域的控制器在我的Areas / Views / controllerView文件夹中找不到任何视图。它发出了一个众所周知的例外,它搜索了这4个标准文件夹,但它没有看到区域..
如何更改代码以便它可以与区域一起使用?也许是ASP.NET MVC 2下支持Areas的自定义视图引擎的一个例子?网上的信息很简陋......
以下是代码:
public class PendingViewEngine : VirtualPathProviderViewEngine
{
public PendingViewEngine()
{
// This is where we tell MVC where to look for our files.
/* {0} = view name or master page name
* {1} = controller name */
MasterLocationFormats = new[] {"~/Views/Shared/{0}.master", "~/Views/{0}.master"};
ViewLocationFormats = new[]
{
"~/Views/{1}/{0}.aspx", "~/Views/Shared/{0}.aspx", "~/Views/Shared/{0}.ascx",
"~/Views/{1}/{0}.ascx"
};
PartialViewLocationFormats = new[] {"~/Views/{1}/{0}.ascx", "~/Views/Shared/{0}.ascx"};
}
protected override IView CreatePartialView(ControllerContext controllerContext, string partialPath)
{
return new WebFormView(partialPath, "");
}
protected override IView CreateView(ControllerContext controllerContext, string viewPath, string masterPath)
{
return new WebFormView(viewPath, masterPath);
}
}
答案 0 :(得分:3)
不是对您的问题的直接回复,而是其他读者可能认为有用的东西,要使用自定义视图,需要修改global.asax:
void Application_Start(object sender, EventArgs e)
{
RegisterRoutes(RouteTable.Routes);
ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(new PendingViewEngine());
}
答案 1 :(得分:2)
...搜索了这4个标准文件夹,但它没有查看区域
这实际上是一个提示 - 由于尚未在自定义视图引擎中定义位置,因此MVC不知道在何处以及如何查找区域视图。
您可能需要设置AreaPartialViewLocationFormats
并在Areas
属性中包含ViewLocationFomats
位置,因为这是启用区域的应用程序。
ViewLocationFormats = new[]
{
"~/Areas/Views/{1}/{0}.aspx",
...
};
可能......
AreaPartialViewLocationFormats = new[]
{
"~/Areas/{1}/Views/{0}.ascx",
"~/Areas/Views/{1}/{0}.ascx",
"~/Views/Shared/{0}.ascx"
};
两个参考文献:
答案 2 :(得分:0)
创建区域时,是否创建了AreaRegistration类?如果是这样,你在global.asax.cs
中有这个吗?顾名思义,它使用MVC注册区域。
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
}