您可以尝试使用ViewBag。
我已经做了一个快速的测试,将一个名为Items的属性添加到ViewBag中。这将从每个区域填充(通过添加自己的项目),并从主布局添加通用项目。然后它将用于呈现主布局中的项目列表。
区域1 \查看\ Shared_Layout.cshtml
@{
ViewBag.Title = "_Layout";
Layout = "~/Views/Shared/_Layout.cshtml";
if (ViewBag.Items == null){ViewBag.Items = new List();}
ViewBag.Items.Add("Area1 item");
}
Area1 Layout
@RenderBody()
查看\ Shared_Layout.cshtml(的一部分)
@{
if (ViewBag.Items == null){ViewBag.Items = new List();}
ViewBag.Items.Add("Common Item");
}
@foreach (var item in ViewBag.Items)
{
@item @* List should contain two items: "Area1 Item", and "Common Item" *@}
我不喜欢太多的代码看起来如何,因为它重复了很多次,并且传播了ViewBag.Items的用法。通过使用Html助手将项目添加到列表并呈现列表,它可能会更清晰。例如,您可以创建以下2个HTML辅助:
public static class HtmlHelpers
{
public static void AddCommonListItems(this HtmlHelper helper, params string[] values)
{
if(helper.ViewContext.ViewBag.Items == null) helper.ViewContext.ViewBag.Items=new List();
helper.ViewContext.ViewBag.Items.AddRange(values);
}
public static MvcHtmlString CommonList(this HtmlHelper helper)
{
if (helper.ViewContext.ViewBag.Items == null)
return new MvcHtmlString(new TagBuilder("ul").ToString());
var itemsList = new TagBuilder("ul");
foreach (var item in helper.ViewContext.ViewBag.Items)
{
var listItem = new TagBuilder("li");
listItem.SetInnerText(item);
itemsList.InnerHtml += listItem.ToString();
}
return new MvcHtmlString(itemsList.ToString());
}
}
然后你的意见会显得更清洁,因为他们只会使用那些佣工,并避免重复代码:
区域1 \查看\ Shared_Layout .cshtml(使用新的HTML佣工)
@{
ViewBag.Title = "_Layout";
Layout = "~/Views/Shared/_Layout.cshtml";
Html.AddCommonListItems("Area1 item", "Area1 item 2");
}
Area1 Layout
@RenderBody()
查看\ Shared_Layout.cshtml(它的一部分,采用新的HTML佣工)
@{Html.AddCommonListItems("Common Item");}
@Html.CommonList()