Мне нужна помощь с помощником по тегу select в ASP.NET Core.
У меня есть список сотрудников, которых я пытаюсь привязать к помощнику по тегам выбора. Мои сотрудники находятся в, List<Employee> EmployeesList
и выбранное значение перейдет в EmployeeId
собственность. Моя модель зрения выглядит так:
public class MyViewModel
{
public int EmployeeId { get; set; }
public string Comments { get; set; }
public List<Employee> EmployeesList {get; set; }
}
Мой класс сотрудников выглядит так:
public class Employee
{
public int Id { get; set; }
public string FullName { get; set; }
}
Мой вопрос заключается в том, как сказать помощнику по выбору тега использовать значение в Id
качестве значения при отображении FullName
в раскрывающемся списке?
<select asp-for="EmployeeId" asp-items="???" />
Я был бы признателен за помощь в этом. Спасибо.
Ответы:
Использование помощников Select Tag для визуализации элемента SELECT
В вашем действии GET создайте объект вашей модели представления, загрузите
EmployeeList
свойство коллекции и отправьте его в представление.А в представлении создания создайте новый
SelectList
объект изEmployeeList
свойства и передайте его как значение дляasp-items
свойства.И ваш метод действия HttpPost для принятия отправленных данных формы.
Или
Если у вашей модели представления есть
List<SelectListItem>
свойство для выпадающих элементов.И в твоих действиях,
И в представлении, вы можете напрямую использовать
Employees
свойство дляasp-items
.Класс
SelectListItem
принадлежитMicrosoft.AspNet.Mvc.Rendering
пространству имен.Убедитесь, что вы используете явный закрывающий тег для элемента select. Если вы используете подход самозакрывающегося тега, помощник тега отобразит пустой элемент SELECT!
Подход ниже не будет работать
Но это будет работать.
Получение данных из таблицы базы данных с использованием структуры сущностей
Приведенные выше примеры используют жестко закодированные элементы для параметров. Поэтому я подумал, что добавлю некоторый пример кода для получения данных с использованием Entity Framework, так как многие люди используют это.
Давайте предположим, что у вашего объекта DbContext есть свойство с именем
Employees
, которое имеет тип, вDbSet<Employee>
которомEmployee
класс сущности имеет свойствоId
and,Name
подобное этомуВы можете использовать запрос LINQ, чтобы получить сотрудников, и использовать метод Select в выражении LINQ, чтобы создать список
SelectListItem
объектов для каждого сотрудника.Предполагается,
context
что ваш объект контекста БД. Код представления такой же, как указано выше.Использование SelectList
Некоторые люди предпочитают использовать
SelectList
класс для хранения элементов, необходимых для отображения параметров.Теперь в вашем действии GET вы можете использовать
SelectList
конструктор для заполненияEmployees
свойства модели представления. Убедитесь , что вы указавdataValueField
иdataTextField
параметры.Здесь я называю
GetEmployees
метод , чтобы получить список объектов Employee, каждый сId
иFirstName
собственностью , и я использую эти свойства , какDataValueField
иDataTextField
изSelectList
объекта , который мы создали. Вы можете изменить жестко закодированный список на код, который считывает данные из таблицы базы данных.Код вида будет таким же.
Визуализируйте элемент SELECT из списка строк.
Иногда вам может потребоваться отобразить элемент select из списка строк. В этом случае вы можете использовать
SelectList
конструктор, который принимает толькоIEnumerable<T>
Код вида будет таким же.
Настройка выбранных параметров
Иногда может потребоваться установить один параметр в качестве параметра по умолчанию в элементе SELECT (например, на экране редактирования вы хотите загрузить ранее сохраненное значение параметра). Для этого вы можете просто установить в качестве
EmployeeId
значения свойства значение, которое вы хотите выбрать.Это выберет опцию Tom в элементе select при визуализации страницы.
Multi select выпадающий
Если вы хотите отобразить раскрывающийся список с множественным выбором, вы можете просто изменить свойство модели представления, которое вы используете для
asp-for
атрибута в вашем представлении, на тип массива.Это отобразит HTML-разметку для элемента select с
multiple
атрибутом, который позволит пользователю выбрать несколько параметров.Настройка выбранных опций в мультиселекте
Подобно одиночному выбору, установите
EmployeeIds
значение свойства в массив значений, которые вы хотите.Это выберет опцию Том и Джерри в элементе множественного выбора при визуализации страницы.
Использование ViewBag для передачи списка элементов
Если вы не предпочитаете сохранять свойство типа коллекции для передачи списка опций представлению, вы можете использовать для этого динамический ViewBag. ( Это не мой лично рекомендуемый подход, так как viewbag является динамическим, и ваш код склонен к необработанному опечатки )
и в представлении
Использование ViewBag для передачи списка элементов и настройки выбранной опции
Это так же, как и выше. Все, что вам нужно сделать, это установить для свойства (для которого вы привязываете раскрывающийся список) значение параметра, который вы хотите выбрать.
и в представлении
Группировка товаров
Вспомогательный метод select tag поддерживает параметры группировки в раскрывающемся списке. Все, что вам нужно сделать, это указать
Group
значение свойства каждогоSelectListItem
в вашем методе действия.Там нет никаких изменений в коде представления. помощник по тегу select теперь будет отображать параметры внутри 2 элементов optgroup .
источник
<option>Please select one</option>
Я создал интерфейс и
<options>
помощник по тегам для этого. Поэтому мне не нужно было конвертироватьIEnumerable<T>
предметы вIEnumerable<SelectListItem>
каждый раз, когда мне нужно заполнить<select>
элемент управления.И я думаю, что это прекрасно работает ...
Использование что-то вроде:
И чтобы заставить его работать с помощником тега, вы должны реализовать этот интерфейс в своем классе:
Это необходимые коды:
Интерфейс:
<options>
Помощник тега:Там может быть некоторая опечатка, но цель ясна, я думаю. Мне пришлось немного отредактировать.
источник
Вы также можете использовать IHtmlHelper.GetEnumSelectList.
источник
Мой ответ ниже не решает вопрос, но относится к.
Если кто-то использует
enum
вместо модели класса, как этот пример:И свойство для получения значения при отправке:
На странице бритвы, вы можете использовать,
Html.GetEnumSelectList<Counter>()
чтобы получить свойства перечисления.Он генерирует следующий HTML:
источник
Вы можете использовать код ниже для множественного выбора :
Вы также можете использовать:
источник
В Get:
В сообщении:
Ввиду :
источник