.Net javascript共享枚举

.Net javascript共享枚举,javascript,.net,enums,Javascript,.net,Enums,有没有办法在.Net VB或C和javascript后面的代码之间共享枚举,以便它们都使用相同的值 是否可以将枚举注册到clientScript 编辑: 问题是: 有没有一种方法可以共享一个在.Net中充当枚举的变量,并在javascript中执行相同的工作。我可以在javascript和.Net中声明,但如果有人稍后修改代码,只需在1个位置进行更改,一切都会爆炸。。。 这就是为什么我要找一些共享的东西 谢谢是的,您可以在javascript中镜像.NET枚举: C: JS: 请注意,这只是一个

有没有办法在.Net VB或C和javascript后面的代码之间共享枚举,以便它们都使用相同的值

是否可以将枚举注册到clientScript

编辑: 问题是: 有没有一种方法可以共享一个在.Net中充当枚举的变量,并在javascript中执行相同的工作。我可以在javascript和.Net中声明,但如果有人稍后修改代码,只需在1个位置进行更改,一切都会爆炸。。。 这就是为什么我要找一些共享的东西


谢谢

是的,您可以在javascript中镜像.NET枚举:

C:

JS:

请注意,这只是一个名为Days的对象,其属性具有数值。javascript中没有枚举的语言实现


如果您想将C枚举自动转换为javascript,只需使用迭代C枚举并将其作为javascript对象声明注入即可。它归结为字符串连接,在.NET framework中没有任何东西可以为您做到这一点。

已经回答了,但我想我也会分享我的解决方案:

//The type of enum we want to use
var enm = typeof(AcceptRejectRule); //or any other enum

//Create the javascript string
var str = "var " + enm.Name + " = {\n" +
        String.Join(",\n", 
               Enum.GetValues(enm).Cast<object>()
               .Select (o => Enum.GetName(enm, o) + ": " + ((int)o))) +
        "\n};";

//Register the javascript to the page for rendering     
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), enm.Name, str, true);
public enum UpdateOptions
{
    Create = 0,
    Read,
    Update,
    Delete,
    None
}

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine(ToJSLiteral<UpdateOptions>());

        Console.ReadKey();
    }

    static string ToJSLiteral<T>() where T : struct
    {
        Type type = typeof(T);
        StringBuilder sb = new StringBuilder();
        int[] values = Enum.GetValues(type).Cast<int>().ToArray();
        sb.Append("var " + type.Name + " = {\n");

        foreach(int value in values)
        {
            string name = Enum.GetName(type, value);
            sb.Append(name + " : " + value + ",\n");
        }

        sb.Length -= 2;
        sb.Append("\n};");
        return sb.ToString();
    }
}

Javascript本身没有枚举。你的确切意思是什么?是的,他们有吗?从您刚刚链接到的文章中可以看出:JavaScript中没有实际的枚举类型,但我们可以接近。。这些都是普通的Javascript对象。它不叫枚举,但它做的工作完全相同。所以问题是:我们是否可以共享一个变量,在.Net中充当枚举,在JavaScription中做同样的工作?我不认为有任何内在的东西,但您可能会编写一个扩展方法,将枚举转换为字符串形式的javascript,然后在页面上注册该脚本。问题是如何在两种语言之间共享一个枚举,不是如何用这两种语言来表达。@Oded共享枚举意味着什么?我相信OP希望在.NET中定义枚举,并从中生成和使用javascript等价物。我将在投票前对其进行测试,但它看起来像是我正在搜索的。谢谢
//The type of enum we want to use
var enm = typeof(AcceptRejectRule); //or any other enum

//Create the javascript string
var str = "var " + enm.Name + " = {\n" +
        String.Join(",\n", 
               Enum.GetValues(enm).Cast<object>()
               .Select (o => Enum.GetName(enm, o) + ": " + ((int)o))) +
        "\n};";

//Register the javascript to the page for rendering     
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), enm.Name, str, true);
public enum UpdateOptions
{
    Create = 0,
    Read,
    Update,
    Delete,
    None
}

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine(ToJSLiteral<UpdateOptions>());

        Console.ReadKey();
    }

    static string ToJSLiteral<T>() where T : struct
    {
        Type type = typeof(T);
        StringBuilder sb = new StringBuilder();
        int[] values = Enum.GetValues(type).Cast<int>().ToArray();
        sb.Append("var " + type.Name + " = {\n");

        foreach(int value in values)
        {
            string name = Enum.GetName(type, value);
            sb.Append(name + " : " + value + ",\n");
        }

        sb.Length -= 2;
        sb.Append("\n};");
        return sb.ToString();
    }
}