我正在对视图、控制器和模型进行分组。结构是
~/Controllers
-- /_Shared
-- -- /Views
-- -- /Content
-- -- /Scripts
-- /Home
-- -- /Models
-- -- /Content
-- -- /Scripts
-- -- /Views
-- -- HomeController.cs
-- /Account
-- -- /Models
-- -- /Views
...
视图和部分视图有效,但布局(主视图)不起作用。当我在 .cshtml 文件中指定布局时,例如:
@{ Layout = "SimpleSharedLayout"; }
我收到此错误:在以下路径中找不到布局页面“SimpleLayout”:
“~/Controllers/Account/Views/SimpleSharedLayout”。
Asp.NET 仅搜索当前控制器目录中的布局,而不查看共享文件夹*(位于 ~/Controllers/_Shared/Views)*
虽然这工作得很好。
@Html.Partial("SharedPartialView")
我必须指定具有完整路径的布局,例如
@{ Layout = "~/Controllers/_Shared/Views/SimpleSharedLayout.cshtml"; }
这不是一件难事,但我为无法让它工作而疯狂。
使用 IIS Express、VS 2012、.NET 4.5
你知道我错过了什么吗?
我的视图引擎:
public class AreaViewEngine : RazorViewEngine
{
public AreaViewEngine()
{
AreaViewLocationFormats = new[] {
"~/Controllers/{1}/Views/{0}.cshtml",
"~/Controllers/_Shared/Views/{0}.cshtml"};
ViewLocationFormats = AreaViewLocationFormats;
AreaMasterLocationFormats = new[] { "~/Controllers/_Shared/Views/{0}.cshtml" };
MasterLocationFormats = AreaMasterLocationFormats;
AreaPartialViewLocationFormats = new[] { "~/Controllers/_Shared/Views/{0}.cshtml",
"~/Controllers/{1}/Views/{0}.cshtml"};
PartialViewLocationFormats = AreaPartialViewLocationFormats;
}
}