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

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

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

【问题讨论】:

标签: javascript asp.net enumeration


【解决方案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://stackoverflow.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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-09-06
            • 2016-04-03
            • 2010-11-03
            • 1970-01-01
            • 1970-01-01
            • 2013-05-04
            相关资源
            最近更新 更多