有没有办法在.Net(VB或C#)和javascript后面的代码之间共享一个枚举,所以它们都使用相同的值?
我们可以在clientScript中注册一个枚举吗?
编辑: 问题是:有没有办法在.Net 中共享一个像枚举一样的变量,并在 javascript 中做同样的工作。我可以同时在 javascript 和 .Net 中声明,但是如果有人稍后修改代码并在 1 处更改它,一切都会爆炸......这就是为什么我正在寻找“共享”的东西
谢谢
有没有办法在.Net(VB或C#)和javascript后面的代码之间共享一个枚举,所以它们都使用相同的值?
我们可以在clientScript中注册一个枚举吗?
编辑: 问题是:有没有办法在.Net 中共享一个像枚举一样的变量,并在 javascript 中做同样的工作。我可以同时在 javascript 和 .Net 中声明,但是如果有人稍后修改代码并在 1 处更改它,一切都会爆炸......这就是为什么我正在寻找“共享”的东西
谢谢
//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);
是的,您可以在 javascript 中镜像一个 .NET 枚举:
C#:
enum Days {Sat, Sun, Mon, Tue, Wed, Thu, Fri};
JS:
var Days = {
Sat: 0,
...
Fri: 6
};
请注意,这只是一个以Days
具有数值的属性命名的对象。Enum
在 javascript中没有语言实现。
如果您想要将 C# 枚举自动转换为 javascript,只需使用GetValues迭代 C# 枚举并将其作为 javascript 对象声明注入。它归结为字符串连接,.NET 框架中没有任何内容可以为您执行此操作。
已经回答但我想我也会分享我的解决方案:
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();
}
}