有没有办法在.Net(VB或C#)和javascript之后的代码之间共享枚举,以便它们使用相同的值?
我们可以将一个枚举注册到clientScript中吗??
修改 问题是: 有没有办法共享一个像.Net中的枚举一样的变量,并在javascript中做同样的工作。我可以在javascript和.Net中声明,但如果有人稍后修改了代码并且juste将其更改为1个地方,那么一切都会爆炸...... 这就是为什么我正在寻找一些“共享”的原因
由于
答案 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();
}
}