2010-11-20 205 views
10

我想知道在ASP.NET MVC中填充常用下拉列表時,最佳實踐是什麼。例如,我有我的申請中經常使用的國家和州選擇。從我的控制器填充viewmodel並綁定到該視圖模型對於我想包含這樣一個下拉列表的每個視圖來說,看起來很髒。ASP.NET MVC - 填充常用下拉列表

在這種情況下,人們如何填充他們的下拉列表? - 這個烘焙的定製基類?助手課程等?

由於提前,

JP

回答

7

你可以有一個RequiresStateList屬性注入的常見功能,需要它的行動。

public class RequiresStateList : ActionFilterAttribute { 
    public override void OnResultExecuting(ResultExecutingContext filterContext) 
    { 
     filterContext.Controller.ViewData["StateList"] = GetStates(); 
    } 
} 

而且你的行動

[RequiresStateList] 
public ActionResult Index() { 
    return View(); 
} 

現在你可以在您的視圖從ViewData的該列表。

+0

不知道爲什麼我沒有想到這是一個優雅且可重用的解決方案。謝謝! – 2010-11-20 15:33:26

+0

@JP,不客氣:) – 2010-11-21 10:31:28

+1

在開玩笑,我宣稱這違反了Thunderdome原則! – Merritt 2011-02-25 16:46:29

3
+0

非常優雅:模型和視圖都不會臃腫。視圖中的*代碼*優雅且可重用。 HtmlHelper可以單獨進行單元測試。 – 2011-02-11 12:17:56

+0

我喜歡這個解決方案,讓他們在模型中。我更願意將我的模型保存到正在填充/提交的數據中,在這種情況下,這將是選定的值 - 而不是完整的值列表。這些也可以讓您的視圖模板獲取DispalyFor模板的選定值的Text屬性(即獲取Value屬性與選定值匹配的Text屬性)。 – 2011-10-24 18:50:32

+0

使用DAL擴展HTML助手會打破MVC架構,因爲您將視圖調用到數據層而不是僅僅是一個虛擬。 儘管打破MVC架構並不一定是件壞事。 – Yorro 2013-07-11 12:06:51

0

我創建匹配視圖模型的大風扇(模型)每個視圖都完全一樣所以,如果你有一個國家下拉列表視圖,我的視圖模型將有一個ListItems的國家集合。

我不擔心查看具有州集合的模型。相反,我會集中邏輯得到美國,是這樣的:

viewModel.States = StatesHelper.GetStates(); // returns IList<ListItem> 
+0

這裏有一個關於這種方法的有趣的說法:http://mikehadlow.blogspot.com/2010/10/populating-drop-down-lists-in-aspnet.html – Merritt 2011-02-25 16:44:34