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

Enum字段下拉框value为显示文本而非整数值的问题咨询

这个问题是因为内置枚举下拉渲染逻辑在开启本地化后,默认会把枚举的显示文本同时赋值给value属性和显示内容,你可以通过以下方式解决:

方案1:手动构造下拉选项(最稳妥,适用所有场景)

不要直接使用Html.GetEnumSelectList<Enum>()这类默认方法生成选项,自己遍历枚举值手动构造SelectListItem集合,显式指定Value为枚举对应的整数值,Text为本地化文本即可。
示例代码:

// 假设你的枚举定义如下
public enum AuditStatus
{
    No = 0,
    Yes = 1
}

// 构造选项集合(如果是在Controller里构造可以注入IStringLocalizer做本地化,在Razor视图里写也同理)
var enumOptions = Enum.GetValues<AuditStatus>()
    .Select(status => new SelectListItem
    {
        Value = ((int)status).ToString(),
        // 此处替换为你项目实际使用的本地化逻辑
        Text = _localizer[status.ToString()].Value
    }).ToList();

视图层绑定生成的enumOptions即可:

<!-- Tag Helper写法 -->
<select asp-for="InvCategory.Status" asp-items="enumOptions" class="custom-select form-control"></select>

<!-- HtmlHelper写法 -->
@Html.DropDownListFor(m => m.InvCategory.Status, enumOptions, new { @class = "custom-select form-control" })

方案2:自定义扩展方法复用逻辑

如果项目里大量用到枚举下拉,你可以自己封装一个GetEnumIntValueSelectList的扩展方法,把上面手动构造的逻辑封装进去,全局调用即可,不用每次重复写。

额外排查点

如果你用了第三方的枚举本地化/自动渲染组件,可以查下对应组件的配置项,一般都有单独的开关可以控制value属性使用枚举原始值/整数值,不用改现有渲染逻辑。
修复后你最终得到的下拉代码应该是如下结构:

<select class="custom-select form-control" data-val="true" data-val-required="Status 字段为必填项" id="InvCategory_Status" name="InvCategory.Status">
    <option selected="selected" value="1">是</option>
    <option value="0">否</option>
</select>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 22:54:01