我们有一个由选项列表驱动的视图。根据初始条件,将创建一个DropDownList,其中包含用户下一步的选择。此列表填充有自定义枚举中包含的较大选项列表。
所以我们有一个像这样的枚举:
public enum ChangeMode
{
[Display(Name ="Please Select")] InitialState,
[Display(Name = "Change A Thing")] ChangeThing,
//...
[Display(Name = "Do a Dance")] DoADance,
FinishedSuccess,
FinishedFailure
}
并且在该视图的控制器中,我们构建了一个列表,其中包含用户的所有有效选项,而从不完整列表。
然后我们基于模型的ChangeModes列表在视图中创建一个DropDownList
@Html.DropDownListFor(m => Model.AlterMethod, new SelectList(Model.ValidModes))
所有这些工作都很好,只是生成的DDL不包括分配每种模式的用户友好名称,而是显示Enum开发人员可读的值(例如,“ InitialState”)。如何更改此设置以使View正确呈现下拉列表,以便它使用Display(Name)作为DDL的文本?
ASP.NET Core附带了用于为以下对象生成SelectListItem的帮助器:任何枚举。
这意味着,如果您有TEnum
类型的枚举,则可以在使用asp-items="Html.GetEnumSelectList<TEnum>()"
查看。
更改:
@Html.DropDownListFor(m => Model.AlterMethod, new SelectList(Model.ValidModes))
收件人:
<select asp-for="AlterMethod" asp-items="Html.GetEnumSelectList<Enums.ChangeMode>()"></select>
或者如果您只想要ValidModes
中的值:
<select asp-for="AlterMethod" asp-items="Html.GetEnumSelectList(Model.ValidModes)"></select>