将字典枚举键渲染为命名值
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();
我有一个看起来像这样的枚举:
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();