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

ASP.NET枚举转字符串搜索报错及默认列表不显示问题求助

ASP.NET搜索功能问题解决方案

问题1:枚举转字符串报错

原因分析

视图中用<input type="text" asp-for="WeekDayName">绑定枚举类型属性时,若页面首次加载提交空值或用户输入无效内容,模型绑定会因无法将字符串转换为枚举抛出错误;同时仓储代码里Enum.TryParse(filterWeekDayFoodViewModel.WeekDayName.ToString(), ...)属于冗余逻辑——若ViewModel的WeekDayName本身是枚举类型,直接使用即可,无需转字符串再解析。

修复方案

  1. 调整ViewModel属性类型:将ViewModel中的WeekDayName改为string类型,避免模型绑定冲突:
public string WeekDayName { get; set; }
  1. 优化仓储过滤逻辑:先判断字符串是否有效,再执行解析和过滤:
// 仅当WeekDayName不为空且能解析为枚举时,才添加过滤条件
if (!string.IsNullOrEmpty(filterWeekDayFoodViewModel.WeekDayName) 
    && Enum.TryParse(filterWeekDayFoodViewModel.WeekDayName, out WeekDayName weekDayNameEnum))
{
    query = query.Where(q => q.WeekDayName == weekDayNameEnum);
}
  1. (可选)替换输入控件:用下拉框代替文本输入,避免用户输入无效值:
<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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 21:50:20