我有两个值的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标签的属性。
如何才能生成多个属性?
答案 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,以及要枚举的角色集合
答案 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>