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

如何让Razor Page搜索返回下拉框多选结果

解决Razor Page多选市政搜索仅返回第一个结果的问题

1. 修正OnPost方法的参数定义

多选下拉框提交的是一组值,不能用单个字符串接收,要改成集合类型(List<string>或string[]),同时要和视图下拉框的name属性对应。

比如原来的参数如果是:

public async Task<IActionResult> OnPostAsync(string StartDate, string EndDate, string Municipality)

要调整为:

// 建议在PageModel中声明绑定属性,配合视图的asp-for使用
[BindProperty]
public List<string> SelectedMunicipalities { get; set; }

public async Task<IActionResult> OnPostAsync(string StartDate, string EndDate)

或者直接在方法参数里用集合:

public async Task<IActionResult> OnPostAsync(string StartDate, string EndDate, List<string> SelectedMunicipalities)

2. 修改查询语句的筛选逻辑

原来的==判断只能匹配单个值,多选场景要改用Contains方法,判断数据中的市政是否在选中集合内:

原查询示例:

var results = _context.Records.Where(r => r.Municipality == Municipality && r.Date >= startDate && r.Date <= endDate);

修改后:

var query = _context.Records.Where(r => r.Date >= startDate && r.Date <= endDate);

// 只有选中了市政时才追加筛选条件,避免空集合导致无结果
if (SelectedMunicipalities != null && SelectedMunicipalities.Any())
{
    query = query.Where(r => SelectedMunicipalities.Contains(r.Municipality));
}

var results = await query.ToListAsync();

3. 确认视图下拉框的配置

确保下拉框开启多选模式,且绑定的字段名和后台一致:

<select asp-for="SelectedMunicipalities" multiple class="form-control">
    <option value="市政A">市政A</option>
    <option value="市政B">市政B</option>
    <!-- 其他市政选项 -->
</select>

关键是要加multiple属性,否则下拉框只能单选;同时asp-for要对应后台的SelectedMunicipalities集合属性。

注意事项

  • 若使用EF Core查询,Contains会被转换为SQL的IN语句,要确保数据库中市政字段的类型和传入的字符串值匹配。
  • 如果允许用户不选任何市政(即全量搜索),一定要保留空集合判断,避免筛选条件变成WHERE ... IN ()导致无结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 16:42:09