2011-04-20 96 views
1

我有一個mvc窗體,其中包含一個int,它應該映射到顯示在下拉列表中的文本字符串。RenderAction生成下拉菜單?

MyViewModel 
{ 
    ...other fields... 
    int Level { get; set; } 
    ...other fields... 
} 

是否可以使用RenderAction作爲Level字段並從單獨的動作生成下拉菜單?

我希望這個問題是連貫的,我正在放棄咖啡,而我的頭不在平時。

+1

你缺少的下降從這個視圖模型中刪除項目集合。你如何期望從一個簡單的整數屬性生成一個下拉列表? – 2011-04-20 12:41:09

+0

這些項目是從數據庫調用中獲取的。整數對應於其中的一個。我希望沒有視圖模型中的下拉項目,而是在單獨的操作中。這就是我問的是否有可能。 – 2011-04-20 14:10:18

+0

如果下拉列表是由RenderAction返回的部分視圖的一部分,將列表作爲視圖模型的一部分包含在內是有意義的。 – 2011-04-20 14:25:56

回答

1

雖然很多人會建議(這是正確的)不這樣做,但如果你堅持,你可以像

public VMDropDown 
{ 
    IEnumerable<SelectListItem> Items{get;set;} 
    public string InputName{get;set;} 
} 

的東西,只要你想重新使用此下拉你能接受它的HTML name屬性的操作方法在你看來參數

public ActionResult(string inputName) 
{ 
    VMDropDown model = new VMDropDown(); 
    model.InpuName = inputName; 
    model.Items = //populate Text and Value property of each SelectListItem from db 
    return View(model); 

} 

你可以寫類似

<:Html.Dropdown(Model.InputName, Model.Items)%> 
+0

這很有道理。默認選擇也很容易處理一個動作參數。 – 2011-04-20 19:24:36

+0

你怎麼認爲這是一個壞主意? – 2011-04-20 19:25:32

+0

理想情況下,您的下拉式廣告素材應由包含您正在編輯的媒體資源的相同視圖模型生成。這種可重用性會在系統中引入不必要的複雜性,並且您會發現自己將更多參數添加到了您的視圖模型的操作方法和屬性中,以滿足呈現此下拉列表的需求 – 2011-04-21 04:28:18