DropDownListFor回调或if语句

w00*_*w00 6 c# razor asp.net-mvc-3

在我的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))
Run Code Online (Sandbox Code Playgroud)

那么还有另一种方法来显示已禁用的播放器,但输出将是这样的,而不是完全隐藏它们:

<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>
Run Code Online (Sandbox Code Playgroud)

DropDownListFor可以实现吗?

Pat*_*iek 2

好的,这是执行此操作的“困难方法”。:) 也许其他人会有更好的主意。

首先,您需要区分选择列表中的有效条目和禁用条目 - 唯一的方法是通过valuetext. option假设无效值带有value == "disabled",否则它是有效 ID:

//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");
Run Code Online (Sandbox Code Playgroud)

然后在视图中

@Html.DropDownListFor(model => model.Position1, ViewBag.MyDropDownList as SelectList);
Run Code Online (Sandbox Code Playgroud)
//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");
Run Code Online (Sandbox Code Playgroud)