【问题标题】:MVC DropdownListFor Enum with int value具有 int 值的 MVC DropdownListFor 枚举
【发布时间】:2025-11-23 13:30:02
【问题描述】:

好的,自从大约 3 年前我第一次开始使用 MVC 以来,这个问题一直困扰着我。 绑定到下拉列表一直是一件令人头疼的事情,但有一种巧妙的方法可以通过这样做来为枚举做到这一点:

 @Html.DropDownListFor(model => model.Type, new SelectList(Enum.GetValues(typeof(mediaZone.Common.Models.AssetType)), Model.Type))

很好,但唯一的问题是该解决方案将输出如下内容:

<select id="Type" name="Type">
    <option>Image</option>
    <option selected="selected">Video</option>
    <option>Website</option>
</select>

我想做的是输出如下内容:

<select id="Type" name="Type">
    <option value="1">Image</option>
    <option value="2" selected="selected">Video</option>
    <option value="3">Website</option>
</select>

我们现在是 MVC 的第 5 版,您会认为很多很多人都遇到过这个问题并且不想编写代码来解决它。 我真的希望有人有一个单行解决我这个琐碎问题的方法:)

干杯, /r3plica

【问题讨论】:

  • 不是我要找的。我不想要一个辅助类,我什至不想再写一行代码。我知道我自己“可以”编写一个辅助类,但可以肯定的是,这个简单的东西应该只是 MVC 的一部分......
  • 所以...您需要知道是否有针对您的问题的 1 行解决方案...这就是您的全部问题?那就不要。算线的事情,回到青春期:)
  • 似乎很奇怪,我可以在一行中根据我的枚举创建一个下拉列表,但我也不能指定默认值.....

标签: c# asp.net-mvc model-view-controller enums html.dropdownlistfor


【解决方案1】:

在控制器中执行,它只是枚举项的 foreach,返回一个包含 2 个值的集合,而不仅仅是名称。

然后...在您看来,您可以获得一行代码,比您现在拥有的代码要干净得多:

@Html.DropDownListFor(model => model.Type, Model.MySelectList)

执行 foreach 的其他好处是,您可能需要在每个 Enum 项目的名称中进行国际化,因此您可以在 foreach 期间进行翻译。

【讨论】: