如何在 Javascript 中获取 C# 枚举

Posted

技术标签:

【中文标题】如何在 Javascript 中获取 C# 枚举【英文标题】:How to get Get a C# Enumeration in Javascript 【发布时间】:2011-07-07 20:35:58 【问题描述】:

我的 C# 代码中有一个 enum,我想在 javascript 中获得相同的 enum

有什么方法可以在不进行硬编码的情况下做到这一点?

【问题讨论】:

我在这里有一个答案:***.com/questions/8345355/… 但使用 MVC/Razor。 【参考方案1】:

剃须刀

非常适合这样的 Razor

var Enumerators = 
   System: 
           @
               <text>DayOfWeek: JSON.parse('@html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(Enum.GetValues(typeof(DayOfWeek)), new Newtonsoft.Json.Converters.StringEnumConverter()))')</text>
           
    


这将在 javaScript 中给出这样的结果
Enumerators.System.DayOfWeek = ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]

如果有错误或不符合要求,请告诉我,谢谢

对于 C# 服务器端

请查看以下可能有用的答案

https://***.com/a/29184357/6737444

【讨论】:

【参考方案2】:

是的,你可以这样做,我是这样做的:

    var OrderStateId = parseInt(stateVal);

    if (OrderStateId === @((int)OrderStates.Approved)) 
        // 5 is the Approved state
        if (OrderOption === "Quote") 
        $('#quoteDiv').css('display', 'block');
     

【讨论】:

【参考方案3】:

如果你想要它作为视图模型 -> 视图 -> JS

要求:

using Newtonsoft.Json;
using System;

视图模型:

// viewmodel property:
 public string MyEumJson
        
            get
            
                return JsonConvert.SerializeObject(Enum.GetValues(typeof(MyEum)), new Newtonsoft.Json.Converters.StringEnumConverter());
            
        

然后在你的 .cshtml 中:

@* View *@

<script>
    var myEnumInJS = '@Html.Raw(Model.MyEumJson)';
</script>

这将被评估为

【讨论】:

以及如何使用它【参考方案4】:

我在这里找到了一个很好的解决方案

http://fairwaytech.com/2014/03/making-c-enums-available-within-javascript/

我唯一的问题是它不带有Description 属性。如果您不使用/不需要描述,那么它是完美的。

这为您提供了客户端的访问权限,如下所示:

var Enums =  
    phoneType: phone:1,fax:2,voiceMail:3,cell:4,,
    addressType: mailing:1,physical:2, 
    ;

【讨论】:

【参考方案5】:

您可以将所有枚举值序列化为 JSON:

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>();

这会注册一个脚本,如:

MyEnum="Red":1,"Green":2,"Blue":3;

【讨论】:

我意识到这是一个将近三年前的答案,但尽管如此,我认为这是解决这个问题的一个非常优雅的解决方案。【参考方案6】:

您可以将其转换为列表,然后将其序列化为 JSON,例如:

// 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 和对 System.Web.Extensions 程序集的引用(供使用 JavaScriptSerializer,但 .Net 存在替代 JSON 序列化库。

在您的 javascript 代码中,您应该使用 JSON 序列化库(例如 json2)来反序列化您的列表:

var mylist = JSON.parse($("#MyHiddenField").val());
for (var i in mylist)

     var item = mylist[i];

更新:Agg,我保证下次会真正阅读这个问题 - 枚举,而不是可枚举

【讨论】:

【参考方案7】:

这是回答您问题的帖子:

JSON serialization of enum as string

【讨论】:

以上是关于如何在 Javascript 中获取 C# 枚举的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C# 中获取枚举项? [复制]

如何在 C# 中按值获取枚举对象?

如何从自定义用户控件 WPF、C# 中的枚举自定义属性中获取值?

C# 根据数字值获取相应枚举

如何将枚举传递给 Html.RadioButtonFor 以获取 MVC 2 RC 2、C# 中的单选按钮列表

如何在javascript变量中获取变量值后面的C#代码?