ASP.NET枚举转字符串搜索报错及默认列表不显示问题求助
ASP.NET搜索功能问题解决方案
问题1:枚举转字符串报错
原因分析
视图中用<input type="text" asp-for="WeekDayName">绑定枚举类型属性时,若页面首次加载提交空值或用户输入无效内容,模型绑定会因无法将字符串转换为枚举抛出错误;同时仓储代码里Enum.TryParse(filterWeekDayFoodViewModel.WeekDayName.ToString(), ...)属于冗余逻辑——若ViewModel的WeekDayName本身是枚举类型,直接使用即可,无需转字符串再解析。
修复方案
- 调整ViewModel属性类型:将ViewModel中的
WeekDayName改为string类型,避免模型绑定冲突:
public string WeekDayName { get; set; }
- 优化仓储过滤逻辑:先判断字符串是否有效,再执行解析和过滤:
// 仅当WeekDayName不为空且能解析为枚举时,才添加过滤条件 if (!string.IsNullOrEmpty(filterWeekDayFoodViewModel.WeekDayName) && Enum.TryParse(filterWeekDayFoodViewModel.WeekDayName, out WeekDayName weekDayNameEnum)) { query = query.Where(q => q.WeekDayName == weekDayNameEnum); }
- (可选)替换输入控件:用下拉框代替文本输入,避免用户输入无效值:
<select asp-for="WeekDayName" class="form-control input-default"> <option value="">请选择周几</option> <option value="Saturday">周六</option> <option value="Sunday">周日</option> <option value="Monday">周一</option> <option value="Tuesday">周二</option> <option value="Wednesday">周三</option> <option value="Thursday">周四</option> <option value="Friday">周五</option> </select>
问题2:默认列表不显示全部数据
原因分析
页面首次加载时,ViewModel的WeekDayName枚举属性默认值为Saturday(0),仓储代码直接执行解析并添加过滤条件,导致默认只显示周六的数据,而非全部列表。
修复方案
添加判断逻辑,仅当用户主动提交有效搜索条件时才应用过滤:
- 若ViewModel的
WeekDayName是字符串类型:参考问题1的修复代码,判断字符串不为空再过滤 - 若保留枚举类型:判断是否为默认值以外的枚举项再过滤:
// 仅当WeekDayName不是默认的Saturday时,才添加过滤 if (filterWeekDayFoodViewModel.WeekDayName != WeekDayName.Saturday) { query = query.Where(q => q.WeekDayName == filterWeekDayFoodViewModel.WeekDayName); }
同时确保页面首次加载时,ViewModel的WeekDayState默认值为All,仓储中switch分支的All情况不添加任何过滤条件(当前代码已满足)。
内容的提问来源于stack exchange,提问作者Maryam12 forex
相关产品推荐
相关产品推荐

