MVC3 布局 - 重复部分

本文关键字:复部 布局 MVC3 | 更新日期: 2023-09-27 18:32:01

我想将布局页面的主体分为两部分:实际正文和侧边栏。该侧边栏可以包含 0、1 或多个<div>元素,这些元素会将我在视图中静态定义的控件或数据组合在一起。为了不在每个视图上重复此div 结构,我想将其拆分为布局页面上的一个部分。但是,由于一个部分不能在一个视图上多次定义,因此我不能重复它们。

我可以静态定义许多侧边栏部分,如下所示,但这似乎是一种肮脏的方法:

<div id="sidebar1">
    @RenderSection("Sidebar1", false))
</div>
<div id="sidebar2">
    @RenderSection("Sidebar2", false))
</div>

有没有办法动态定义这种类型的布局?

我已经看到一些提到模板化 Razor 代表,它可以用作将参数封装在div 块中的函数:

@{ 
    Func<dynamic, object> div = @<div class="block">@item</div>;
}
@div("Block 1")
@div("Block 2")

但是这些似乎只接受不是我正在寻找的文本,并且在布局上定义时它们不会被视图继承。

MVC3 布局 - 重复部分

"模板化 Razor 代表"不限于只接受"字符串"。可以将委托定义为:

在视图:

@model IEnumerable<SidebarViewModel>
@{ 
    Func<SidebarViewModel, object> div = @<div class="block">@item.Name</div>;
}
@foreach (var block in Model)
{ 
    @div(block)
}

您将在委托中获得完整的智能支持。

示例视图模型:

public class SidebarViewModel
{
    public string Name { get; set; }
}

我认为您不需要更多部分来解决此问题,相反,您可以做的是当您渲染侧边栏部分时,您可能只想渲染视图(这将动态处理您的多个div 逻辑)像这样

@section Sidebar
{
    @{Html.RenderAction("actiontorendermultipledivs", "Fromthiscontroller");}
}