我有一个为视图中的每一行生成的字段,如下所示:
@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
,我希望从下拉列表中排除当前行的值(注意它是父键属性)。 / p>
答案 0 :(得分: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))