#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> Если он не может решить проблему, вы можете поделиться своим представлением и процессом передачи.