如何让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
相关产品推荐
相关产品推荐

