web-dev-qa-db-ja.com

JavaScriptでC#列挙を取得する方法

C#コードに列挙型があり、JavaScriptでも同じ列挙型を取得したいと考えています。ハードコーディングせずにこれを実行する方法はありますか?.

前もって感謝します

26
Jishnu A P

すべての列挙値を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};
37
Sjoerd

あなたがそれをviewmodel-> view-> 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>

これは次のように評価されます

enter image description here

4
user2330270

はい、あなたはこのようにそれを行うことができます、私はこのようにしました:

    var OrderStateId = parseInt(stateVal);

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

これをリストに変換してから、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];
}

更新:ああ、私は実際にread質問を読むと約束します-列挙ではなく、列挙可能

1
Justin

これがあなたの質問に答えた投稿です:

文字列としての列挙型のJSONシリアル化

1
Zayar

カミソリ用

このようなカミソリに完全に対応

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

Enumerators.System.DayOfWeek = ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]

間違いがあるか、必要なニーズに適切に適合していない場合はお知らせください、ありがとうございます

C#サーバー側の場合

役に立つかもしれない次の答えを見てください

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

0
Ali Jamal