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

ASP.NET中Enum下拉框默认值异常,无法显示指定初始选项

解决Enum绑定下拉框默认选中第一个值的问题

问题根源在于Enum是值类型,默认会被初始化为第一个枚举值(New),所以下拉框自动选中了它,而你添加的空选项仅作为普通选项存在。结合你的需求(保留[Display(Name)]多语言支持、Required验证),可以按以下步骤解决:

1. 修改Model中的Type属性为可空枚举

将Model1里的Type属性改为可空类型,这样默认值为null,下拉框会自动匹配value=""的初始选项:

using System.ComponentModel.DataAnnotations;

public class Model1
{
    [Required(ErrorMessage = "请选择类型")]
    public Type? Type { get; set; } // 改为可空枚举
}

2. 视图代码保持不变

原有的视图代码无需修改,Html.GetEnumSelectList<T>会自动适配可空枚举,同时保留[Display(Name)]特性的多语言支持:

<label asp-for="Type" class="control-label">enum list</label>
<select class="form-select" asp-for="Type" asp-items="Html.GetEnumSelectList<Type>()" oninput="this.className = 'form-select'">
    <option value="">select pls</option>
</select>
<span asp-validation-for="Type" class="text-danger"></span>

原理说明

  • 可空枚举Type?的默认值是null,ASP.NET MVC会自动将其与value=""的选项绑定,使初始选项"select pls"成为默认选中项。
  • [Required]属性依然会生效,用户必须选择一个非空的枚举值才能通过验证,不会丢失校验逻辑。
  • Html.GetEnumSelectList<Type>会正常读取枚举上的[Display(Name)]特性,完全满足多语言需求,无需手动构造SelectListItem。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 19:26:06