从asp.net核心应用程序中删除多个选择

时间:2016-05-25 07:43:15

标签: asp.net asp.net-mvc .net-core-rc2

我有两个值的List<SelectListItem>变量。我想把它表示为html中的下拉框,所以我这样做。

<div class="form-group row">
    <label asp-for="Roles" class="col-sm-2 col-sm-offset-2 form-control-label"></label>
    <div class="col-md-6">
        <select asp-for="Roles" asp-items="@Model.Roles" class="form-control selectpicker bs-select-hidden"></select>
    </div>           
</div>

并且此代码显示了包含这两个项目的列表,但它也生成了

multiple="multiple"
select标签的

属性。

如何才能生成多个属性?

5 个答案:

答案 0 :(得分:2)

如果您的asp-for属性是IEnumerable,则Select Tag Helper会自动使select元素成为多个元素。避免这种情况的方法是使用您的基类(而不是集合)作为asp-for属性。 asp-items属性应该仍然是一个集合,因为这些项目将成为选择列表中的选项。

在您的示例中,这只是将您的asp-for =“Roles”更改为asp-for =“Role”

<div class="form-group row">
<label asp-for="Roles" class="col-sm-2 col-sm-offset-2 form-control-label"></label>
<div class="col-md-6">
    <select asp-for="Role" asp-items="@Model.Roles" class="form-control selectpicker bs-select-hidden"></select>
</div>           

您可能需要调整传递给视图的视图模型,以便它可以访问基类Role,以及要枚举的角色集合

ASP NET Core Select Tag Helper Reference

答案 1 :(得分:0)

在您的选择

中设置multiple=false

答案 2 :(得分:0)

尝试以下

<select multiple="multiple" size="1">

答案 3 :(得分:0)

您可以使用javascript:

删除此属性multiple

型号:

public int RoleId { get; set; }

public SelectList Roles { get; set; }

添加帮助程序css类,例如:single-select

<select asp-for="RoleId" asp-items="@Model.Roles" class="single-select">
</select>

使用Javascript:

$(function(){
    $(".single-select").removeAttr("multiple");
});

注意: 如果您提交表单,则可以查看名为RoleId的媒体资源。名为Roles的属性可能仅用于显示所有项目。

答案 4 :(得分:0)

  

如果asp-for属性中指定的属性是IEnumerable check this link

,则选择标记帮助器将自动生成多选。

因此,您可以通过使用字符串作为名称和项目列表,轻松地解决此问题:

 public SelectList Roles { get; set; }
 public string Role { get; set; }

然后查看

<select asp-for="Role" asp-items="Model.Roles">
</select>