将字典枚举键渲染为命名值

Render Dictionary Enum keys as named values

我有一个看起来像这样的枚举:

public Enum MyEnum {EnumA = 0, EnumB = 10, EnumC = 20}

我还有一个字典模型,我想在我的 Razor 视图中使用,我想在其中将字典的键分配给一个 javascript 数组,如下所示:

var myArray = @Html.Raw(Json.Encode(Model.Keys.ToArray()))

这导致 myArray = [0,10,20] 非常接近我想要的结果。我想添加枚举的 "text" 值而不是数值,如下所示:myArray = ["EnumA","EnumB","EnumC"]

显示单个枚举字段时@Html.DisplayFor可用于将数值转换为枚举"text"值。

有没有办法让我的键以相同的方式转换,而不必遍历它们并手动将它们添加到数组中?

你可以试试这个:

var values = Model.Keys.ToArray().Select(val => val.ToString());
var myArray = @Html.Raw(Json.Encode(values));

如果键仍然是 MyEnum 类型,那么它们应该自动表示为枚举值的名称。

如果还是不行,你也可以试试这个:

var values = Model.Keys.ToArray().Select(val => ((MyEnum)val).ToString());
var myArray = @Html.Raw(Json.Encode(values));

这假设如果您的键不是 MyEnum 类型,它们至少是整数。

请注意,如果键中的值与定义的 MyEnum 值不对应(例如,如果您定义了值 1-4 而键为 17),您仍然会得到键值作为数字字符串。

您可以使用 Enum.Parse;

var array = new List<int> {0, 10, 20};
var arrayEnum = array.Select(x => Enum.Parse(typeof(MyEnum), x.ToString())).ToList();