[英]Render Dictionary Enum keys as named values
我有一个枚举看起来像这样:
public Enum MyEnum {EnumA = 0, EnumB = 10, EnumC = 20}
我还希望在Razor视图中使用一个Dictionary模型,在该模型中,我想将Dictionary的键分配给如下所示的javascript数组:
var myArray = @Html.Raw(Json.Encode(Model.Keys.ToArray()))
这导致myArray = [0,10,20]
与我想要的非常接近。 我希望添加枚举的“文本”值而不是数值,例如: myArray = ["EnumA","EnumB","EnumC"]
显示单个枚举字段时, @Html.DisplayFor
可用于将数值转换为枚举“文本”值。
有没有一种方法可以使我的键以相同的方式转换而不必遍历它们并将它们手动添加到数组中?
您可以尝试以下方法:
var values = Model.Keys.ToArray().Select(val => val.ToString());
var myArray = @Html.Raw(Json.Encode(values));
如果键仍为MyEnum
类型, 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();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.