我想将布局页面的主体分为两部分:实际的主体和侧边栏。该侧边栏可以包含0个,1个或更多<div>
元素,这些元素将控件或数据组合在一起,我在视图中静态定义。为了不在每个视图上重复这个div结构,我想将其拆分为布局页面上的一个部分。但是,由于某个部分无法在视图上定义多次,因此我无法重复它们。
我可以静态地定义一些侧边栏部分,如下所示,但这似乎是一种肮脏的方式:
<div id="sidebar1">
@RenderSection("Sidebar1", false))
</div>
<div id="sidebar2">
@RenderSection("Sidebar2", false))
</div>
有没有办法动态定义这种类型的布局?
我已经看过一些Templated Razor Delegates的提及,可以用作在div块中封装参数的函数:
@{
Func<dynamic, object> div = @<div class="block">@item</div>;
}
@div("Block 1")
@div("Block 2")
但是这些似乎只接受不是我正在寻找的文本,并且在布局上定义时它们不会被View继承。
答案 0 :(得分:0)
我认为你不需要更多的部分来解决这个问题,而你可以做的是当你渲染侧边栏部分时,你可能只想呈现视图(它将动态处理你的多个div逻辑)这样的东西
@section Sidebar
{
@{Html.RenderAction("actiontorendermultipledivs", "Fromthiscontroller");}
}
答案 1 :(得分:0)
'Templated Razor Delegates'不仅限于接受'string'。您可以将委托定义为:
在视图中:
@model IEnumerable<SidebarViewModel>
@{
Func<SidebarViewModel, object> div = @<div class="block">@item.Name</div>;
}
@foreach (var block in Model)
{
@div(block)
}
您将在代表中获得完整的智能支持。
示例ViewModel:
public class SidebarViewModel
{
public string Name { get; set; }
}