我有像这样的 C# 枚举列表类,
namespace MyProject.MyEnumListClass
{
public enum MyEnum
{
ValueOne,
ValueTwo,
ValueThree,
ValueFour,
ValueFive,
ValueSix
}
}
这就是我在 razor cshtml 中的 javascript 中使用此列表的方式
@using MyProject.MyEnumListClass
<script>
.....
if (type != "@((int)MyEnum.ValueThree)")
.....
</script>
通过使用 razor 的 @
在 javascript 代码中引用这些枚举值,可以在 razor 中轻松完成。但现在,
我想将这个 javascript 代码分离到 .js
文件,我试图将这个枚举列表传递给 javascript 文件并在其中使用。
在 javascript 分隔文件中使用 C# 枚举列表的最佳和正确方法是什么?
最佳答案
C# 代码在服务器上执行。 JS代码在浏览器上执行。
您将无法在 javascript 中获取 C# 枚举引用。
最好的方法是在 javascript 中定义一个对象,该对象在枚举中具有相同的值。 然后该对象可以在您的 JavaScript 代码中使用。
如果您使用纯 javascript,JS 代码将如下所示:
var SizeEnum = {
SMALL: 1,
MEDIUM: 2,
LARGE: 3,
};
引用this article如果您想了解有关 javascript 语法的更多信息
编辑:
如果你不想在JS文件中明确指定它们,那么你可以写扩展方法as specified in this article .这会将 C# 枚举转换为 JS 枚举。这也将帮助您使您的 JS 代码始终与 C# 枚举保持同步。
public static class EnumHelper
{
public static HtmlString EnumToString<T>()
{
var values = Enum.GetValues(typeof(T)).Cast<int>();
var enumDictionary = values.ToDictionary(value => Enum.GetName(typeof(T), value));
return new HtmlString(JsonConvert.SerializeObject(enumDictionary));
}
}
然后您可以在 razor 文件中使用它,如下所示。因为这是一个脚本,所以这个变量应该在您的 JS 文件中可用。
<script>
var assetStatusEnum = @(EnumHelper.EnumToString<SizeEnum>())
</script>
注意:这会创建一个可以在 javascript 中使用的 JSON 对象。 此解决方案仅在您使用普通 javascript 时适用。 如果您使用的是 typescript ,我建议您在 typescript 中使用并行类,因为它们会在编译时提供更好的类型检查。
关于javascript - 如何将 C# 枚举列表传递和使用到 Javascript 文件并在其中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54167188/