DropDownListFor回调或if语句

时间:2012-06-21 10:26:16

标签: c# asp.net-mvc-3 razor

在我的MVC3应用程序中,我有一个下拉列表。在那里我必须显示所有结果,但必须禁用某些结果,以便它们不可选择。我怎么能这样做?

这就是我现在所拥有的。它只是没有显示已禁用设置为 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可以实现吗?

1 个答案:

答案 0 :(得分:2)

好的,这是做这件事的'艰难之路'。 :)也许别人会有更好的主意。

首先,您需要区分选择列表中的有效和禁用条目 - 只有这样才能通过value的{​​{1}}或text。假设无效值将包含option,否则它是有效的ID:

value == "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);