1

我有一个名为 SiteTypes 的枚举,其中包含几个都绑定到下拉列表的值。在客户端,我需要检查此下拉列表以查看所选值是否是这些枚举值之一。我不想在脚本中硬编码枚举的值以防它需要更改,所以我想使用服务器标签直接从枚举本身获取它。Conecptually,我想这样做:

function SiteIdChanged() {
    var x = "<%=SiteTypes.Employee %>";
}

我现在这样做的方式是在代码隐藏中创建一个受保护的属性,该属性返回该特定的枚举值,并且正在这样做:

function SiteIdChanged() {
    var x = "<%=EmployeeSiteTypeValue %>";
}

不过,我不喜欢这样,因为我必须在需要进行此类检查的每个页面上创建一个特殊属性。

有没有办法在这里做我想做的事?

4

4 回答 4

2

只要您enum被标记public,您就可以选择您的第一个选项。无需在要从中检索值的每个页面上都放置一个属性。

这种方法确实是在 JavaScript 中写出服务器端值的最简单的解决方案。

于 2011-10-26T19:36:15.140 回答
2

如果您不喜欢当前的实现,我会考虑使用 aPageMethod将下拉选择与枚举值进行比较。这种方法可能会更干净,因为您可以在服务器端执行大部分逻辑。

这是一个教程PageMethods:http:
//blogs.microsoft.co.il/blogs/gilf/archive/2008/10/04/asp-net-ajax-pagemethods.aspx

于 2011-10-26T19:38:02.997 回答
2

您在编译或运行页面时是否收到“xxx 由于其保护级别而无法访问”错误?枚举默认是公共的,类不是。我的猜测是您已经在页面的类中定义了枚举,并且没有使用“公共”访问修饰符显式标记它。明确地将其标记为公开或将其移出课堂,看看会发生什么。如果您打算在很多页面上使用它,您应该将枚举定义粘贴在项目的 App_Code 文件夹中的文件中。

于 2011-10-26T20:11:29.993 回答
0

您可以使用 Enum.IsDefined 方法很好地告诉您从下拉列表中选择的值是否实际上是您的枚举的一部分。

Enum.IsDefined(typeof(MyEnum), myValue)

http://msdn.microsoft.com/en-us/library/system.enum.isdefined.aspx

于 2011-10-26T19:39:36.223 回答