1

我有一个为视图中的每一行生成的字段,如下所示:

@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应该根据当前行提供,我希望从下拉列表中排除当前行的值(注意它是父键属性)。

4

1 回答 1

1

您可以创建一个返回 a 的 Helper 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))    
于 2012-11-23T02:46:06.103 回答