从数据库一直到 AngularJS 常量的 C# 枚举

标签 c# angularjs sql-server enums asp.net-core

我需要一些关于在我们的网络项目中一般使用枚举的指导。更详细地说,我的意思是我们的查找表,如 PersonType、PrivilegeType、ContactType 等,将在 dll(或 C# 文件,每个枚举一个文件)中创建,例如 Enums.dll,然后这些枚举将作为常量添加到我们的“通用”AngularJS 模块,结果如下:

angular
.module('common', [])
.constant('ePrivilegeType', {
    NoPermissions: 1,
    ViewOnly: 2,
    ViewAndUpdate: 3
})
.constant('ePersonType', {
    Administration: 1,
    Student: 2,
    Father: 3,
    Mother: 4
});

这种工作流程常见且可以接受吗?我们怎样才能实现这种工作流程呢?在我们所有的项目中使用枚举将使我们的生活变得更加轻松。

最佳答案

如果这些匹配仅需要向用户显示(例如在组合框中),我使用了为我提供这些值的 Web API。因此,在 AngularJS 中使用的数据对象中仍然是这个神奇的数字。但来自/api/enum/privilegeTypes下的服务器您将返回格式为的对象数组

[{
  value: 1,
  name: "NoPermissions",
  description: "This is not allowed"
}, ...]

在服务器(.net 中)上,您创建一个简单的类(例如 EnumWrapper )和一个工厂方法(例如 EnumWrapper.From<PrivilegeType>()EnumWrapper.From(enumTypeName) ),该方法迭代所有枚举值(使用 Enum.GetValues() )并创建所需的列表并返回它。

public enum PrivilegeType
{
    [Description("Access not allowed")]
    NoPermissions = 1,
    [Description("Read only ")]
    ViewOnly = 2,
    [Description("Read and write access")]
    ViewAndUpdate = 3
}

通过使用这种方法,您的数据对象中仍然拥有魔数(Magic Number),但您可以使用一些有意义的文本向用户呈现可用选项,如果您更改枚举值或名称,则只需在服务器端更改它们而不是在客户端。

关于从数据库一直到 AngularJS 常量的 C# 枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45564407/

相关文章:

c# - 登录 Visual Studio 2010 后无法运行代码的原因是什么?

angularjs - Angular 配置中的多个功能

sql-server - 为什么当SQL Server设置为强制加密时,SSMS允许登录,而SSMS登录选项中没有选择 'encrypt connection'选项

c# - 声称类似于 Windows 任务栏的桌面空间的 WPF 应用程序

c# - 使用依赖注入(inject)进行内部操作的类库的最佳实践是什么?

c# - 使用 StreamReader 访问解密的 Rijndael 加密文件而不写入磁盘

AngularJS 从一个服务广播不会触发对第二个服务的调用

javascript - 在向前迭代之前等待调用函数完成

sql - 通过动态调用使用 SQLCMD 的更智能方式

sql-server - CASE WHEN 在 SQL Server : seek vs scan 中使用索引