繁体   English   中英

ASP.NET:可以使用服务器标签将C#或VB.NET表达式嵌入到Javascript函数中吗?

[英]ASP.NET: Can you use server tags to embed C# or VB.NET expressions into a Javascript function?

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

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

我现在的操作方式是在代码背后创建一个受保护的属性,该属性返回该特定的枚举值,并正在执行此操作:

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

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

有什么办法可以在这里做我想要的吗?

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

该方法实际上是在JavaScript中写出服务器端值的最简单解决方案。

如果您不喜欢当前的实现,则可以考虑使用PageMethod将下拉选择项与枚举值进行比较。 由于您可以在大多数逻辑服务器端进行操作,因此这种方法可能更简洁。

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

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

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

Enum.IsDefined(typeof(MyEnum), myValue)

http://msdn.microsoft.com/zh-CN/library/system.enum.isdefined.aspx

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM