首页 > 解决方案 > ASP.NET Core 使用多选列表框过滤列表

问题描述

我有一个使用“列表”模板的标准剃须刀页面,我添加了一个下拉列表来过滤显示哪些记录。我使用了这里的代码示例:https ://docs.microsoft.com/en-us/aspnet/core/tutorials/razor-pages/search?view=aspnetcore-3.1

使用教程的“按类型搜索”部分。

我让它工作,但希望用户能够从列表中选择多个项目用作过滤器。我在选择标签中添加了“多个”,我可以选择多个项目,但它只处理选择的第一个项目。

如何将多个项目添加到过滤器中,以便所有选定的值都显示在列表中?

标签: asp.net-corefilterlistbox

解决方案


在 select 标签中添加“multiple”后,需要修改接收到的 model 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>

然后,它将获得 Multiple MovieGenre。

结果: 在此处输入图像描述


推荐阅读