ASP.NET Основная фильтрация списка с помощью списка с несколькими вариантами выбора

#asp.net-core #filter #listbox

#asp.net-ядро #Фильтр #список

Вопрос:

У меня есть стандартная страница razor, использующая шаблон «Список», в который я добавил выпадающий список для фильтрации отображаемых записей. Я использовал пример кода отсюда:https://learn.microsoft.com/en-us/aspnet/core/tutorials/razor-pages/search?view=aspnetcore-3.1

Используя раздел «Поиск по жанру» в руководстве.

У меня это работает, но хотелось бы, чтобы пользователи могли выбирать несколько элементов из списка для использования в качестве фильтров. Я добавил «несколько» в тег выбора, и я могу выбрать несколько элементов, но он обрабатывает только первый выбранный элемент.

Как я могу добавить несколько элементов в фильтр, чтобы все выбранные значения отображались в списке?

Ответ №1:

После добавления «множественного» к тегу выбора вам необходимо изменить полученную модель MovieGenre . Например:

 public class IndexModel : PageModel
    {
        [BindProperty(SupportsGet = true)]
        public string SearchString { get; set; }
        public SelectList Genres { get; set; }
        [BindProperty(SupportsGet = true)]
        public List<string> MovieGenre { get; set; }

        public void OnGet()
        {
            // Transfer data here.
            Genres = new SelectList(new List<Genre> {
                new Genre{id=1,GenreName="Genre1"},
                new Genre{id=2,GenreName="Genre2"},
                new Genre{id=3,GenreName="Genre3"},
            },"id", "GenreName");
        }
}


 public class Genre
    {
        public int id { get; set; }
        public string GenreName { get; set; }
}
  

В Index.cshtml:

 <form>
            <select asp-for="MovieGenre" asp-items="Model.Genres" multiple>
                <option value="">All</option>
            </select>
            <input type="submit" value="Filter" />
</form>
  

Затем он получит несколько жанров фильма.

Результат: введите описание изображения здесь

Комментарии:

1. Спасибо за ответ. Это приближает меня, но я все еще чего-то не понимаю. Я думаю, что это как-то связано со следующим: if (!string. IsNullOrEmpty (жанр фильма)) { фильмы = movies. Где(x => x.Genre == MovieGenre); } В оригинале «MovieGenre» — это строка, и все работает нормально. Когда я меняю его на список, я получаю сообщение об ошибке «Не удается преобразовать из списка <строка> в символ.

2. Пожалуйста, убедитесь, что списку выбора переданы правильные параметры. Вторым параметром является значение, третьим параметром является текст. Браузер проанализирует его следующим образом: <значение параметра =»1″>Genre1</option> Если он не может решить проблему, вы можете поделиться своим представлением и процессом передачи.