Удалить множественный выбор из основного приложения asp.net
Я имею 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"
атрибут для выбора тега.
Как сделать так, чтобы не генерировать несколько атрибутов?
5 ответов
Помощник по тегу выбора автоматически делает элемент выбора множественным, если свойство asp-for является IEnumerable. Чтобы избежать этого, используйте свой базовый класс (не коллекцию) в качестве свойства 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, а также к коллекции ролей, которые нужно перечислить.
Помощник тега select автоматически сгенерирует множественный выбор, если свойство, указанное в атрибуте asp-for, является IEnumerable.
Таким образом, вы можете легко решить эту проблему, используя строку для имени и список элементов следующим образом:
public SelectList Roles { get; set; }
public string Role { get; set; }
Тогда ввиду
<select asp-for="Role" asp-items="Model.Roles">
</select>
Вы можете удалить этот атрибут multiple
с помощью JavaScript:
Модель:
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
вероятно только для отображения всех предметов.