Ste*_*ann 2 javascript c# enums
我有 C# 枚举列表类,例如,
namespace MyProject.MyEnumListClass
{
public enum MyEnum
{
ValueOne,
ValueTwo,
ValueThree,
ValueFour,
ValueFive,
ValueSix
}
}
Run Code Online (Sandbox Code Playgroud)
这就是我在 razor cshtml 中的 javascript 中使用此列表的方式
@using MyProject.MyEnumListClass
<script>
.....
if (type != "@((int)MyEnum.ValueThree)")
.....
</script>
Run Code Online (Sandbox Code Playgroud)
通过使用 razor@引用 javascript 代码中的枚举值,可以在 razor 中轻松完成。但是现在,我想将此 javascript 代码分离到.js文件中,并且我试图将此枚举列表传递给 javascript 文件并在其中使用。
在 javascript 分隔文件中使用 C# 枚举列表的最佳和正确方法是什么?
C# 代码在服务器上执行。JS 代码在浏览器上执行。
您将无法在 javascript 中获得 C# 枚举引用。
最好的方法是在 javascript 中定义一个对象,该对象在 Enum 中具有相同的值。然后可以在您的 JavaScript 代码中使用该对象。
如果您使用纯 javascript,JS 代码将如下所示:
var SizeEnum = {
SMALL: 1,
MEDIUM: 2,
LARGE: 3,
};
Run Code Online (Sandbox Code Playgroud)
如果您想了解有关 javascript 语法的更多信息,请参阅本文
编辑:
如果不想在 JS 文件中显式指定它们,那么可以按照本文指定的方式编写扩展方法。这会将 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));
}
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以在 razor 文件中使用它,如下所示。因为这是一个脚本,这个变量应该在你的 JS 文件中可用。
<script>
var assetStatusEnum = @(EnumHelper.EnumToString<SizeEnum>())
</script>
Run Code Online (Sandbox Code Playgroud)
注意:这会创建一个您可以在 javascript 中使用的 JSON 对象。此解决方案仅适用于使用纯 javascript 的情况。如果您使用的是 typescript,我建议在 typescript 中使用并行类,因为它们会在编译时提供更好的类型检查。
| 归档时间: |
|
| 查看次数: |
3019 次 |
| 最近记录: |