Удалить множественный выбор из основного приложения 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, а также к коллекции ролей, которые нужно перечислить.

Справочное руководство по выбору тегов ASP NET Core

Помощник тега 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 вероятно только для отображения всех предметов.

Попробуйте следовать

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

Задавать multiple=false на ваше усмотрение

Другие вопросы по тегам