How to get Get a C# Enumeration in Javascript
我的C代码中有一个枚举,我希望在JavaScript中获得相同的枚举。有没有没有办法不用硬编码来实现这个目的?
提前谢谢
可以将所有枚举值序列化为json:
1 2 3 4 5 6 7 8 9 10 11 | private void ExportEnum<T>() { var type = typeof(T); var values = Enum.GetValues(type).Cast<T>(); var dict = values.ToDictionary(e => e.ToString(), e => Convert.ToInt32(e)); var json = new JavaScriptSerializer().Serialize(dict); var script = string.Format("{0}={1};", type.Name, json); System.Web.UI.ScriptManager.RegisterStartupScript(this, GetType(),"CloseLightbox", script, true); } ExportEnum<MyEnum>(); |
这会注册如下脚本:
1 | MyEnum={"Red":1,"Green":2,"Blue":3}; |
是的,你可以这样做,我是这样做的:
10如果您希望它作为viewmodel->view->js
要求:
1 2 | using Newtonsoft.Json; using System; |
Viewmodel:
1 2 3 4 5 6 7 8 | // viewmodel property: public string MyEumJson { get { return JsonConvert.SerializeObject(Enum.GetValues(typeof(MyEum)), new Newtonsoft.Json.Converters.StringEnumConverter()); } } |
然后在.cshtml中:
1 2 3 4 | @* View *@ var myEnumInJS = '@Html.Raw(Model.MyEumJson)'; |
这将被评估为
这是回答你问题的帖子:
枚举作为字符串的JSON序列化
您可以将其转换为列表,然后将其序列化为JSON,例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | // In the code-behind private void _Default_Load(object sender, EventArgs e) { var objects = GetObjects(); var serialiser = new JavaScriptSerializer(); this.MyHiddenField.Value = serialiser.Serialize(objects); } // Example enumerable static IEnumerable<MyClass> GetObjects() { for (int i = 0; i < 10; i++) { yield return new MyClass(); } } |
上面要求.NET 3.5和对
在您的javascript代码中,您应该使用JSON序列化库(如JSON2)来反序列化您的列表:
1 2 3 4 5 | var mylist = JSON.parse($("#MyHiddenField").val()); for (var i in mylist) { var item = mylist[i]; } |
更新:agg,我保证下次实际阅读问题-枚举,不可枚举!
剃刀
非常适合这种剃刀
1 2 3 4 5 6 7 | var Enumerators = { System: { @{ <text>DayOfWeek: JSON.parse('@Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(Enum.GetValues(typeof(DayOfWeek)), new Newtonsoft.Json.Converters.StringEnumConverter()))')</text> } } } |
这将在javascript中产生类似的结果。
1 | Enumerators.System.DayOfWeek = ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"] |
如果有错误或不符合要求,请告诉我,谢谢。
对于服务器端请查看以下可能有用的答案
https://stackoverflow.com/a/29184357/6737444
我在这里找到了一个很好的解决方案
http://fairwaytech.com/2014/03/making-c-enums-available-within-javascript/
我唯一的问题是它没有携带
这为您提供了客户端的访问,如下所示:
1 2 3 4 | var Enums = { phoneType: {phone:1,fax:2,voiceMail:3,cell:4,}, addressType: {mailing:1,physical:2,} }; |