我有一个 ASP.NET MVC 4 网站,分为多个区域。每个区域都有一个
我尝试了两种方法:
1. 为每个区域创建一个自定义的
2. 创建一个静态类和一个静态集合,每个
我正在考虑使用
另一种选择是将列表的呈现推入到在每个区域的
有什么建议吗?
Views/Shared/_Layout.cshtml
视图,引用了一个共享的通用布局。在通用布局中,我有一个侧边栏,其中包含一系列项目。我希望能够拥有一个共享的项目列表,可以被所有的 _Layout.cshtml
视图访问,以汇总一组链接。
Area1/Views/Shared/_Layout.cshtml:
@{
SidebarItems.Add("Area1 Item");
Layout = "~/Views/Shared/_Layout.cshtml";
}
Views/Shared/_Layout.cshtml:
@{
SidebarItems.Add("Common Item");
}
<ul>
@foreach (var item in SidebarItems)
{
<li>@item</li> @* List should contain two items: "Area1 Item", and "Common Item" *@
}
</ul>
我尝试了两种方法:
1. 为每个区域创建一个自定义的
WebViewPage<T>
类,该类继承自一个共同的自定义 WebViewPage<T>
类,并将 SidebarItems
集合作为共同基类的属性。但这并不起作用,因为似乎 Razor 在移动布局时会分配一个新的 WebPageView
。2. 创建一个静态类和一个静态集合,每个
_Layout
调用该集合以添加项。这成功地累积了列表项,但由于它是静态类,其生命周期与应用程序域相关联,这意味着侧边栏从访问多个请求的每个区域中累积项,而不是每个请求的列表。我正在考虑使用
HttpRequest.Items
属性,但这似乎生存时间过短 - 项目列表在请求之间不会更改,并且完全取决于显示的区域视图。另一种选择是将列表的呈现推入到在每个区域的
_Layout
中呈现的section
中。这不是最理想的,因为我希望在代码中有一个单一的点来呈现列表,但是也可以做到。有什么建议吗?
ViewBag
。如果没有其他问题,明天会接受它。 - Lucas