2015-04-16 41 views
4

我正在構建一個內聯網,並且主頁將在顯示大量不同位數的小部件中進行介紹。我有一個帶有各種IEnumerables屬性的Home.cs模型,用於所需的數據。 我一直在使用查看文件夾DisplayFor模板來呈現該數據。 我現在遇到了一個問題,需要以兩種不同的方式顯示兩個不同的員工名單。MVC一種類型,一個頁面 - 兩個不同的DisplayFor

我可以使用局部視圖渲染其中一個列表或者可能繼承該類並使用不同的模板。繼承似乎需要更多的工作,我想知道是否有人知道MVC設計使用的特定方式,或者只是任何人的首選解決方案?

+0

它們是否與不同的控制器相關聯?如果是這樣,你可以有一個「DisplayTemplates」文件夾關聯每個控制器。 –

回答

2

只要有兩個不同的模板,然後指定要使用的模板,爲每個this overloadDisplayFor的:

@Html.DisplayFor(m => m.StaffList, "StaffTemplate1") 

@Html.DisplayFor(m => m.StaffList, "StaffTemplate2") 
+0

我更喜歡這個答案,它只是維護性的唯一原因,它更容易在頁面代碼中看到爲什麼使用不同的模板。此外,這遭受缺乏可枚舉的支持:http://stackoverflow.com/questions/25333332/correct-idiomatic-way-to-use-custom-editor-templates-with-ienumerable-models-in 但在所有公平使用這對於每一個循環來說都很髒並且很髒,這比試圖解決這個可枚舉的問題要容易得多。 – Tod

2

如果要使用不同的顯示模板,每個員工列表中,您可以指定要使用的模板在DisplayFor電話:

@Html.DisplayFor(m => m.StaffListOne, "StaffTemplateOne"); 
@Html.DisplayFor(m => m.StaffListTwo, "StaffTemplateTwo"); 

或者你可以添加一個UIHint屬性模型屬性:

[UIHint("StaffTemplateOne")] 
public IEnumerable<Staff> StaffListOne { get;set; } 

[UIHint("StaffTemplateTwo")] 
public IEnumerable<Staff> StaffListTwo { get;set; } 
+0

謝謝你的貢獻,UIHint也缺乏Enumerable支持。我還研究了[DisplayType(「CustomType」)]欺騙渲染使用另一個模板,顯然是用於處理Enumerables,但不再在MVC 5中。希望VNext會有答案。 – Tod

相關問題