2012-11-23 92 views
1

我有一個對每行視圖生成的字段,如下所示:MVC:動態填充HTML選擇

@Html.DropDownListFor(m => m.MenuParentKey, ViewBag.MenuKeys as SelectList)  

但我想填充下拉每一行單獨,通過調用在控制器中,這裏的行動就是這個意思:

public ActionResult GetMenuKeys(string currentMenuKey) 
{ 
    var dictionary = MenuKeys.Where(mk => mk.Key != currentMenuKey); 

    return View(new SelectList(dictionary, 
     "Key", 
     "Value", 
     Page.DefaultParentKey)); 
} 

currentMenuKey應根據當前行提供,我想當前行的值,從下拉列表中排除(注意它的父 - 鑰匙財產)。

回答

1

您可以創建一個幫助器,它將返回SelectList

這將允許你直接從你的視圖調用它,你也可以根據需要傳遞參數。

我認爲這比在控制器上調用一個動作更容易。

從我在這裏看到的情況來看,控制器操作不會獲取列表以外的任何其他資源。

你可以像這樣的東西去:

public static SelectList FilteredList(this HtmlHelper helper, MenuKeys keys, string CurrentMenuKey) 
{ 
var dictionary = MenuKeys.Where(mk => mk.Key != currentMenuKey); 

    return new SelectList(dictionary, 
     "Key", 
     "Value", 
     Page.DefaultParentKey); 
} 

然後,你可以這樣調用它:

@Html.DropDownListFor(m => m.MenuParentKey, Html.FilteredList(ViewBag.MenuKeys as SelectList, m.currentKey))