.Net javascript共享枚举

时间:2012-08-02 15:01:33

标签: javascript .net enums

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

我们可以将一个枚举注册到clientScript中吗??

修改 问题是: 有没有办法共享一个像.Net中的枚举一样的变量,并在javascript中做同样的工作。我可以在javascript和.Net中声明,但如果有人稍后修改了代码并且juste将其更改为1个地方,那么一切都会爆炸...... 这就是为什么我正在寻找一些“共享”的原因

由于

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

是的,你可以在javascript中使用.NET enum镜像:

C#:

enum Days {Sat, Sun, Mon, Tue, Wed, Thu, Fri};

JS:

var Days = {
    Sat: 0,
    ...
    Fri: 6
};

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

如果您想要将C#enum自动转换为javascript,只需使用GetValues迭代C#枚举并将其作为javascript对象声明注入。它归结为字符串连接,.NET框架中没有任何内容可以为您执行此操作。

答案 2 :(得分:0)

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

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();
    }
}
相关问题