C#コードに列挙型があり、JavaScriptでも同じ列挙型を取得したいと考えています。ハードコーディングせずにこれを実行する方法はありますか?.
前もって感謝します
すべての列挙値を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};
あなたがそれを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>
これは次のように評価されます
はい、あなたはこのようにそれを行うことができます、私はこのようにしました:
var OrderStateId = parseInt(stateVal);
if (OrderStateId === @((int)OrderStates.Approved)) {
// 5 is the Approved state
if (OrderOption === "Quote") {
$('#quoteDiv').css('display', 'block');
}
これをリストに変換してから、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質問を読むと約束します-列挙ではなく、列挙可能!
これがあなたの質問に答えた投稿です:
このようなカミソリに完全に対応
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"]
間違いがあるか、必要なニーズに適切に適合していない場合はお知らせください、ありがとうございます
役に立つかもしれない次の答えを見てください