2012-04-24 68 views
2

:實際的身體和一個側邊欄。該側邊欄可包含將組控制或數據一起,我靜態在我的視圖中定義爲0,1或更多<div>元件。爲了不在每個視圖上重複這個div結構,我想將其拆分爲我的佈局頁面上的一個部分。但是,由於一個部分不能在視圖上多次定義,我不能重複。MVC3佈局 - 我想我的頁面佈局的主體分成兩個部分重複節

我可以靜態定義多個側邊欄部分如下,但是這似乎是一個骯髒的方式去做:

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

有什麼辦法來動態地定義了這種佈局的?

我看到了幾個提到模板化剃刀代表的可以用作功能封裝在一個div塊參數:

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

但這些似乎只接受文字是不是我m尋找並且它們在佈局上定義時不被視圖繼承。

回答

0

「模板化的剃刀代表」並不限於只接受「串」。您可以定義委託作爲:

鑑於:

@model IEnumerable<SidebarViewModel> 

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

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

您將獲得委託全面的IntelliSense支持。

樣品視圖模型:

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

謝謝,這應該很好地工作任何完全動態塊我想補充。最終,我決定改爲定義幾個可選部分,因爲我想在其中放置的內容在每個頁面上靜態定義,而不是動態生成。如果我遇到需要添加更多動態元素或ViewModels的情況,這將非常有效。 – Lilienthal 2012-04-27 10:29:06

0

我不認爲你需要更多的部分來解決這個問題,而不是你所能做的就是,當你渲染側邊欄部分,你可能只是想渲染視圖(這將動態地處理你的多格邏輯)像這

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