我有一个Enum看起来像这样:
public Enum MyEnum {EnumA = 0, EnumB = 10, EnumC = 20}
我也有一个字典模型,我希望在我的Razor视图中使用,我希望将Dictionary的键分配给一个javascript数组,如下所示:
var myArray = @Html.Raw(Json.Encode(Model.Keys.ToArray()))
这导致myArray = [0,10,20]
非常接近我想要的。我想要添加枚举的“文本”值而不是数值,如下所示: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();