2011-09-20 31 views
2

我正在MVC3中開發一個應用程序,它在相當多的頁面上有下拉列表來填充特定對象的選擇。我的問題是,在我的ViewModel中包含下拉列表的集合還是調用服務來填充下拉列表更有意義。ViewModel中的MVC3集合或從Ajax服務中填充

例如,它更有意義,有這樣的:

public class MyViewModel 
{ 
    public int SelectedFooId { get; set; } 
    public IEnumerable<Foo> Foos { get; set; } 
} 

@Html.DropDownListFor(model => model.SelectedFooId, new SelectList(Model.Foos, "Id", "Name", "-- Select Foo --")) 

還是有從視圖模型取出Foos收集,並通過JSON或某事與阿賈克斯填充它來實現這更好的辦法?如果我打電話給一個服務,你能提供一個這樣做的例子嗎?我對MVC還是比較陌生的,並且正在嘗試通過最佳實踐來做所有事情,因爲我不想陷入任何困境。

回答

4

這是在ASP.NET MVC應用程序中呈現下拉列表的非常好的方法。您可以定義包含2個屬性的視圖模型:將選定值綁定到的標量屬性以及將選項綁定到的集合。然後,您將控制器操作填充到此視圖模型中,並傳遞給視圖並在視圖內使用DropDownListFor幫助程序。

使用AJAX填充下拉列表的值可能會在做一些動態綁定時非常有用。例如,您可以通過級聯下拉列表來執行此操作,其中第一個ddl的選擇將限制第二個的值。這是如何實現的example

+0

謝謝。如果我有多個下拉列表來設置兩個屬性,比如說五個?這仍然是一個很好的實施,還是這開始混亂模型? – shuniar

+0

@shuniar,仍然是一個很好的實現。請記住,視圖模型類的作用是反映給定視圖的需求。因此,如果您需要在視圖中顯示5個ddls,則您的視圖模型上將有5個相應的標量屬性,以將選定值綁定到5個集合並將選項綁定到該集合。 –

+0

感謝您的澄清。我將繼續執行此實施。 – shuniar