【问题标题】:Include default "Select Option" in MVC Html.DropDownListFor在 MVC Html.DropDownListFor 中包含默认的“选择选项”
【发布时间】:2014-08-10 21:37:11
【问题描述】:

我的模型包含一个IEnumerable<SelectListItem>,视图包含一个DropDownListFor,除了在某些情况下我需要包含一个值为-1 的默认“选择选项”之外,它工作正常。

在控制器中:

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

在视图中:

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

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

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

由于确定当前是否选择选项的逻辑位于控制器中,因此我希望将其添加到控制器中 - 如果可能的话。或者,如果我可以在视图中添加&lt;option ... 并在控制器将 -1 作为 ItemId 时被选中,那也可以。

【问题讨论】:

    标签: c# asp.net-mvc


    【解决方案1】:

    要添加默认项,您可以尝试

    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() 的调用很重要,这样您就可以使用项目列表,而不仅仅是枚举器。

    【讨论】:

    • 即使在附加了.ToList() 之后我也没有.Insert(...) 的选项
    • 啊,好的。 Items是什么类型的?
    • 这是IEnumerable&lt;SelectListItem&gt;
    • 将其更改为IList&lt;SelectListItem&gt;。这样,您就可以使用Insert
    • 做到了。谢谢。 ;)
    【解决方案2】:

    “DropDownListFor”有一个覆盖,它采用“optionLabel”作为参数

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

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

    【讨论】:

    • 谢谢鞋。我希望在控制器中做到这一点,杰森的回答帮助了我。
    • 选项标签参数达到的效果和你知道的一样
    猜你喜欢
    • 2021-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多