You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Blazor中使用下拉选框筛选数据列表

实现无重复州下拉选框筛选SchoolsTable数据

现有情况说明

我有一个名为SchoolsTable的表,现有视图会显示所有已录入的记录。模型定义如下:

public partial class SchoolsTable
{
    public int Id{ get; set; }
    public int Name{ get; set; }
    public int State{ get; set; }
}

我想要在视图中添加一个下拉选框,选择某个州后,视图仅显示对应州的记录。

当前我的Razor组件代码:

<table style="width:50%; margin-left:710px; border:1px solid black" border="1" class="table-bordered">
      <tr bgcolor="#ffffff" style="border:1px solid black">
           <th style="border:1px solid black">Schools</th>
          @foreach (var item in school)
          {         
        <th style="border:1px solid black">@item.Name</th>
        <th style="border:1px solid black">@item.State</th>
          }
      </tr>
    </table>

@code{
    private List<SchoolTable> schools=new List <SchoolTable>();
    private SchoolTable school= new SchoolTable();
    protected override async Task OnInitializedAsync()
    {
        GetSchoolTable();

    }
    private List<SchoolTable> GetSchoolTable()
    {
        schools= SchoolService.GetSchoolTable();
        return schools;
    }
}

直接遍历schools生成的下拉选框会出现重复州选项:

<label for="State">Choose a State:</label>
<select name="State">
    @foreach (var item in schools)
    {
        <option value="@item.State">@item.State</option>
    }
</select>

我另外创建了包含2条记录的StatesTable表,模型如下:

public partial class StatesTable
{
    public int Id{ get; set; }
    public int Description{ get; set; }
}

通过遍历StatesTable数据生成的下拉选框能得到无重复的州选项:

<label for="State">Choose a State:</label>
<select name="State">
    @foreach (var item in branch)
    {
        <option value="@item.Id">@item.Description</option>
    }
</select>

需要实现通过这个无重复州的下拉选框筛选SchoolsTable数据的功能。


实现步骤

1. 完善组件数据与变量定义

在@code块中补充必要的数据存储变量,包括州数据列表、选中的州ID、筛选后的学校列表:

@code{
    private List<SchoolsTable> schools = new List<SchoolsTable>();
    private List<StatesTable> states = new List<StatesTable>();
    private int? selectedStateId;
    private List<SchoolsTable> filteredSchools = new List<SchoolsTable>();

    protected override async Task OnInitializedAsync()
    {
        // 获取全量学校和州数据
        schools = SchoolService.GetSchoolTable();
        states = StateService.GetStatesTable(); // 替换为你实际获取州数据的方法
        // 初始状态显示所有学校
        filteredSchools = schools;
    }
}

2. 改造下拉选框添加绑定与触发事件

修改下拉选框,绑定选中值并添加值变化时的筛选触发逻辑,同时增加"全部州"的默认选项:

<label for="State">选择州:</label>
<select id="State" @bind="selectedStateId" @onchange="FilterSchoolsByState">
    <option value="">全部州</option>
    @foreach (var state in states)
    {
        <option value="@state.Id">@state.Description</option>
    }
</select>

3. 实现筛选逻辑方法

在@code中添加根据选中州ID筛选学校的方法:

private void FilterSchoolsByState()
{
    if (selectedStateId.HasValue)
    {
        // 匹配选中州ID的学校数据
        filteredSchools = schools.Where(s => s.State == selectedStateId.Value).ToList();
    }
    else
    {
        // 未选择时恢复显示所有数据
        filteredSchools = schools;
    }
}

4. 修正表格渲染逻辑

将表格遍历的数据源改为筛选后的filteredSchools,同时修正原表格遍历单个对象的错误:

<table style="width:50%; margin-left:710px; border:1px solid black" border="1" class="table-bordered">
    <tr bgcolor="#ffffff" style="border:1px solid black">
        <th style="border:1px solid black">ID</th>
        <th style="border:1px solid black">学校名称</th>
        <th style="border:1px solid black">所属州</th>
    </tr>
    @foreach (var item in filteredSchools)
    {         
        <tr>
            <td style="border:1px solid black">@item.Id</td>
            <td style="border:1px solid black">@item.Name</td>
            <td style="border:1px solid black">@item.State</td>
        </tr>
    }
</table>

5. 额外优化建议

原模型中SchoolsTable的Name、State以及StatesTable的Description定义为int类型不符合业务逻辑,建议修改为string类型:

public partial class SchoolsTable
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int StateId { get; set; } // 对应StatesTable的Id字段
}

public partial class StatesTable
{
    public int Id { get; set; }
    public string Description { get; set; } // 州名称
}

对应筛选逻辑也需调整为s.StateId == selectedStateId.Value。


内容的提问来源于stack exchange,提问作者Kibofigs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 11:20:28