6

在我的 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 有可能吗?

4

1 回答 1

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

然后在视图中

@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 回答