C# MVC3布局-重复部分

C# MVC3布局-重复部分,c#,asp.net-mvc-3,layout,razor,C#,Asp.net Mvc 3,Layout,Razor,我想将布局页面的主体分为两个部分:实际的主体和侧边栏。该侧边栏可以包含0、1或多个元素,这些元素将把我在视图中静态定义的控件或数据分组在一起。为了避免在每个视图上重复此div结构,我想在布局页面上将其拆分为一个部分。但是,由于不能在视图上多次定义截面,因此我不能重复这些步骤 我可以静态地定义一些边栏部分,如下所示,但这似乎是一种肮脏的方式: <div id="sidebar1"> @RenderSection("Sidebar1", false)) </div>

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

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

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

@渲染部分(“侧边栏1”,错误))
@渲染部分(“侧边栏2”,错误))
是否有任何方法可以动态定义这种类型的布局

我已经看到了一些关于模板化Razor委托的介绍,这些委托可以用作将参数封装在div块中的函数:

@{ 
    Func<dynamic, object> div = @<div class="block">@item</div>;
}
@div("Block 1")
@div("Block 2")
@{
Func div=@@item;
}
@分区(“第一区”)
@分区(“第2座”)

但是它们似乎只接受我不想看到的文本,并且在布局上定义时它们不会被视图继承。

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

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

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

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

“模板剃须刀委托”不限于仅接受“字符串”。您可以将委托定义为:

鉴于:

@model IEnumerable<SidebarViewModel>

@{ 
    Func<SidebarViewModel, object> div = @<div class="block">@item.Name</div>;
}

@foreach (var block in Model)
{ 
    @div(block)
}

“模板剃须刀委托”不限于仅接受“字符串”。您可以将委托定义为:

鉴于:

@model IEnumerable<SidebarViewModel>

@{ 
    Func<SidebarViewModel, object> div = @<div class="block">@item.Name</div>;
}

@foreach (var block in Model)
{ 
    @div(block)
}

谢谢,这对于我想添加的任何完全动态的块都应该很好。最终我决定定义几个可选的部分,因为我想放在其中的内容在每个页面上都是静态定义的,而不是动态生成的。如果我遇到需要添加更多动态元素的情况,这将非常有效r ViewModels。谢谢,这对于我想要添加的任何完全动态的块都应该非常有效。最终我决定定义几个可选的部分,因为我想要放置在其中的内容在每个页面上都是静态定义的,而不是动态生成的。如果我遇到需要添加更多动态的情况,这将非常有效ic元素或视图模型。