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

代わりにを返すヘルパーを作成できます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 に答える