微风是否支持使用c#Enums

时间:2014-05-31 10:00:14

标签: enums breeze

我想用微风填充我的下拉菜单。它在微风元数据中显示枚举,但我没有找到如何使用它的方法。微风是否为c#enums工作提供了支持?

2 个答案:

答案 0 :(得分:0)

如果您使用的是标准的Breeze WebApi服务器,那么枚举值应该全部以字符串形式出现,并且也可以作为字符串保存回服务器。开箱即用,默认的Breeze WebApi服务器实现将在两个方向上自动将字符串转换为正确的枚举值。

(注意:这不适用于使用当前MS WebApi / OData提供程序的服务器,因为MS尚不支持使用此提供程序的枚举 - MS将在即将发布的4.0版本中支持此功能。)

因此,例如,假设您有一个服务器端枚举,如下所示:

public enum RoleType {
   Guest = 0,
   Restricted = 1,
   Standard = 2,
   Admin = 3
}

与“角色”相结合具有' RoleType'的类属性,然后以下查询将起作用:

    var query = new EntityQuery("Roles").where("RoleType", "==", 'Restricted');
    myEntityManager.executeQuery(query).then(...);

同样,如果您想更改给定角色的RoleType,那么您可以

    role.RoleType = "Standard"; // assuming breeze backingStore adapter.
    myEntityManager.saveChanges();

答案 1 :(得分:0)

如果要生成离线breeze元数据,则可以在元数据本身中获取所有Enums定义,并且可以创建JS Dictionary(关联数组)来填充所有枚举类型及其定义。

嗯我的情况是我在我的网络项目中使用NancyFx(没有EF)+ Breeze + AngularJS。我离线生成元数据并将其存储在metadata.js文件中。

在创建EntityManager之后,我在JS字典中提取了枚举定义,我后来用它来绑定下拉列表,显示相应的枚举字符串等。

提取枚举定义&存储在JS词典

        JSON.parse(window.app.metadata).schema.enumType.forEach(function (enumType) {
            var newEnumValues = [];

            enumType.member.forEach(function (enumValue) {
                var newEnumValue = { id: enumValue.value, name: enumValue.name };
                newEnumValues.push(newEnumValue);
            });

            enumDictionary[enumType.name] = newEnumValues;
        });

基于枚举名称和valueid检索枚举值的方法

        function GetEnumDictionaryValue(enumName, enumValueId) {
            var result = null;
            enumDictionary[enumName].some(function (enumValue) {
                if (enumValue.id == enumValueId) {
                    result = enumValue.name;
                    return;
                }
            });

            return result;
        }

将值绑定到下拉列表 现在要绑定下拉列表,只需调用enumDictionary []并将结果存储在控制器变量中。 我使用的是Angular JS,所以我在html页面上使用了以下代码

      <select ng-options="type.id as type.name for type in <VariableName>"
                        ></select>