在 MVC Html.DropDownListFor 中包含默认"Select Option"



我的模型包含一个IEnumerable<SelectListItem>,视图包含一个DropDownListFor,工作正常,除了我需要在某些情况下包含一个默认的"Select an Option"值为-1。

在控制器中:

model.Items = _context.SomeTable.Select(m => new SelectListItem()
{
    Text = m.SomeName,
    Value = m.SomeId
});

In the View:

@Html.DropDownListFor(
    w => Model.ItemId,
    new SelectList(Model.Items, "Value", "Text", Model.ItemId),
    new { @class = "form-control text-left" })

在Controller或View之间,如何将以下内容添加为第一个选项并有条件选择(如果ItemId == -1)?

<option value="Select an Item">Select an Item</option>

由于确定当前是否有选择的选项的逻辑在控制器中,所以如果可能的话,我更愿意将其添加到控制器中。或者,如果我可以在视图中添加<option ...,并在控制器传递-1作为ItemId时被选中,这也可以工作。

要添加默认项,可以尝试

model.Items.Insert(0, new SelectListItem { Text = "Please Select", Value = "-1" });

这将把项目推到选择列表的顶部。在调用

之后执行此操作
model.Items = _context.SomeTable.Select(m => new SelectListItem()
{
    Text = m.SomeName,
    Value = m.SomeId
}).ToList();

添加对ToList()的调用是很重要的,这样您就可以使用项目的投影列表,而不仅仅是枚举器。

有一个重写'DropDownListFor',它接受一个'optionLabel'作为参数

@Html.DropdownListFor(m => m.id, "select one", Model.selectList, new {})

您可能想要检查它为该选项生成的值。我想它不是0就是-1

最新更新