gpt4 book ai didi

c# - MVC EnumDropDownListFor 以 Enum Display Description 属性作为值

转载 作者:太空狗 更新时间:2023-10-29 21:22:00 28 4
gpt4 key购买 nike

我有一个带有显示描述属性的枚举,

public enum CSSColours
{
[Display(Description = "bg-green")]
Green,

[Display(Description = "bg-blue")]
Blue,
}

现在我想将此 Enum 绑定(bind)到 DropDownlist,在 Dropdown 项目显示文本和 Description 中显示 Enum 值(绿色,蓝色)作为项目值(bg-green,bg-blue)。

当我使用 EnumDropDownListFor 辅助方法绑定(bind) Dropdown 时

@Html.EnumDropDownListFor(c => dm.BgColor)

它将项目值设置为枚举值 (0, 1),但找不到将值设置为显示说明的方法。

如何将值设置为枚举显示描述属性?

最佳答案

您需要从 Enum 中获取显示名称 (DisplayAttribute),检查下面的示例以设置枚举显示描述属性的值

Action (绑定(bind)下拉列表)

public ActionResult Index()
{
var enumDataColours = from CSSColours e in Enum.GetValues(typeof(CSSColours))
select new
{
ID = StaticHelper.GetDescriptionOfEnum((CSSColours)e),
Name = e.ToString()
};
ViewBag.EnumColoursList = new SelectList(enumDataColours, "ID", "Name");
return View();
}

帮助方法 GetDescriptionOfEnum 通过枚举名称获取 Description 属性

public static class StaticHelper
{
public static string GetDescriptionOfEnum(Enum value)
{
var type = value.GetType();
if (!type.IsEnum) throw new ArgumentException(String.Format("Type '{0}' is not Enum", type));

var members = type.GetMember(value.ToString());
if (members.Length == 0) throw new ArgumentException(String.Format("Member '{0}' not found in type '{1}'", value, type.Name));

var member = members[0];
var attributes = member.GetCustomAttributes(typeof(System.ComponentModel.DataAnnotations.DisplayAttribute), false);
if (attributes.Length == 0) throw new ArgumentException(String.Format("'{0}.{1}' doesn't have DisplayAttribute", type.Name, value));

var attribute = (System.ComponentModel.DataAnnotations.DisplayAttribute)attributes[0];
return attribute.Description;
}
}

Razor View

@Html.DropDownList("EnumDropDownColours", ViewBag.EnumColoursList as SelectList)

枚举

public enum CSSColours
{
[Display(Description = "bg-green")]
Green,

[Display(Description = "bg-blue")]
Blue,
}

关于c# - MVC EnumDropDownListFor 以 Enum Display Description 属性作为值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31508815/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com