6

私の MVC3 アプリケーションには、ドロップダウン リストがあります。そこにすべての結果を表示する必要がありますが、一部の結果を無効にして選択できないようにする必要があります。どうやってやるの?

これは私が今持っているものです。Disabledがtrueに設定されているプレイヤーは表示されません。

@Html.DropDownListFor(m => m.Position1, Model.SelectedTeam.TeamPlayers
                     .Where(c => c.Player.Disabled == false)
                     .OrderBy(t => t.Player.Lastname)
                     .ToSelectList(m => m.FullName, m => m.PlayerId))

無効なプレイヤーも表示する別の方法がありますが、出力は完全に非表示にするのではなく、次のようになります。

<select>
  <option>Player 1</option>
  <option disabled="disabled">Player 2</option>
  <option>Player 3</option>
  <option>Player 4</option>
  <option disabled="disabled">Player 5</option>
  <option>Player 6</option>
</select>

それは DropDownListFor で可能ですか?

4

1 に答える 1

2

OK、これが「難しい方法」です。:) たぶん、他の誰かがより良いアイデアを持っているでしょう。

まず、選択リストの有効なエントリと無効なエントリを区別する必要があります。それを行う唯一の方法はvalue、. 無効な値に があるとしましょう。それ以外の場合は有効な ID です。textoptionvalue == "disabled"

//Somewhere in the controller
...
var list = yourViewModel.SelectedTeam.TeamPlayers.OrderBy(p => p.LastName).Select(new SelectListItem
    {
        Text = item.LastName,
        Value = item.Disabled ? "disabled" : item.PlayerId.ToString()
    }).ToList();

//pass it however you want, in the model or by ViewBag
ViewBag.MyDropDownList = new SelectList(list, "Value", "Text");

そして、ビューで

@Html.DropDownListFor(model => model.Position1, ViewBag.MyDropDownList as SelectList);
$(document).ready(function()
{
    $(#"Position1 option[value=\"disabled\"]").prop("disabled",true);
});
于 2012-06-21T11:39:56.387 に答える