【问题标题】:ASP.NET Core filter a list using a multi-select List BoxASP.NET Core 使用多选列表框过滤列表
【发布时间】:2020-09-15 15:45:14
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: asp.net-core filter listbox


    【解决方案1】:

    select标签加上“multiple”后,需要修改接收到的模型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。

    结果:

    【讨论】:

    • 感谢您的回复。这让我更接近,但我仍然错过了一些东西。我认为这与以下内容有关: if (!string.IsNullOrEmpty(MovieGenre)) { movies = movies.Where(x => x.Genre == MovieGenre);在原版中,“MovieGenre”是一个字符串,一切正常。当我将其更改为列表时,我收到错误“无法从 List 转换为 char.
    • 请确保 SelectList 传递了正确的参数。第二个参数是值,第三个参数是文本。浏览器会这样解析:如果不能解决,可以分享下你的看法和传输过程。
    猜你喜欢
    • 2012-08-20
    • 2015-05-13
    • 2012-06-12
    • 2021-10-30
    • 2022-01-20
    • 2017-03-19
    • 2019-10-07
    • 1970-01-01
    • 2020-10-18
    相关资源
    最近更新 更多