gpt4 book ai didi

asp.net-mvc - 如何使用枚举值填充下拉列表?

转载 作者:行者123 更新时间:2023-12-02 06:16:45 27 4
gpt4 key购买 nike

我的 View 模型的属性之一有一个枚举。我想显示一个包含枚举的所有值的下拉列表。我可以使用以下代码让它工作。

我想知道是否有一种简单的方法可以将枚举转换为 IEnumerable?我可以像下面的示例一样手动执行此操作,但是当我添加新的枚举值时,代码会中断。我想我可以按照这个 example 通过反射来做到这一点,但是还有其他方法可以做到这一点吗?

public enum Currencies
{
CAD, USD, EUR
}

public ViewModel
{
[Required]
public Currencies SelectedCurrency {get; set;}

public SelectList Currencies
{
List<Currencies> c = new List<Currencies>();
c.Add(Currencies.CAD);
c.Add(Currencies.USD);
c.Add(Currencies.EUR);

return new SelectList(c);
}
}

最佳答案

我正在使用我找到的助手 here为了使用通用枚举类型填充我的 SelectLists,我做了一些修改以添加所选值,如下所示:

public static SelectList ToSelectList<T>(this T enumeration, string selected)
{
var source = Enum.GetValues(typeof(T));

var items = new Dictionary<object, string>();

var displayAttributeType = typeof(DisplayAttribute);

foreach (var value in source)
{
FieldInfo field = value.GetType().GetField(value.ToString());

DisplayAttribute attrs = (DisplayAttribute)field.
GetCustomAttributes(displayAttributeType, false).FirstOrDefault()

items.Add(value, attrs != null ? attrs.GetName() : value.ToString());
}

return new SelectList(items, "Key", "Value", selected);
}

它的好处是它将 DisplayAttribute 读取为标题而不是枚举名称。 (如果您的枚举包含空格或者您需要本地化,那么它会让您的生活变得更轻松)

因此,您需要将显示属性添加到您的枚举中,如下所示:

public enum User_Status
{
[Display(Name = "Waiting Activation")]
Pending, // User Account Is Pending. Can Login / Can't participate

[Display(Name = "Activated" )]
Active, // User Account Is Active. Can Logon

[Display(Name = "Disabled" )]
Disabled, // User Account Is Diabled. Can't Login
}

这就是您在 View 中使用它们的方式。

<%: Html.DropDownList("ChangeStatus" , ListExtensions.ToSelectList(Model.statusType, user.Status))%>

Model.statusType 只是一个 User_Status 类型的枚举对象。

就是这样,您的 ViewModel 中不再有 SelectList。在我的示例中,我在 ViewModel 中引用枚举,但您可以直接在 View 中引用枚举类型。我这样做只是为了让一切变得干净漂亮。

希望这对您有帮助。

关于asp.net-mvc - 如何使用枚举值填充下拉列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3705330/

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