【发布时间】:2021-01-25 16:04:12
【问题描述】:
我正在 MVC 中创建一个 Web API。在我的 ViewModel-Objects 中,我想为整数输入创建验证,这些验证稍后会在过程中映射到一些枚举。
注意:由于项目范围之外的限制,我无法将视图模型的类型更改为实际的枚举。
这是我所拥有的:
[ClientValidation]
public class ContactDataObject {
[Range(1,3)] //fixed range, bad
public int? SalutationCd { get; set; }
}
我也可以
[Range(/*min*/(int)Salutation.Mr, /*max*/(int)Salutation.LadiesAndGentlemen)]
这很好用,我们现在有 3 种称呼方式。但是,由于我已经知道这稍后会映射到枚举,所以我想做这样的事情,请参阅 [EnumDataTypeAttribute Class][1]。
[ClientValidation]
public class ContactDataObject {
[EnumDataType(typeof(Salutation))] //gives mapping error
public int? SalutationCd { get; set; }
}
但是,这会导致映射错误。
我想要一个属性,它只验证我的整数是否在给定枚举的值内。 如何验证枚举的(整数)值?
【问题讨论】:
-
我会写自己的
ValidationAttribute来检查值是否可以转换为特定的枚举类型 -
尝试使用
Enum.GetNames(typeof(MyEnum)).Length获取枚举类型的长度 -
@KrishnaChaitanya 如果枚举使用显式值声明并且有间隙可能会失败
-
@KrishnaChaitanya 给定范围表达式的值必须是常量,因此这种动态方法不起作用
-
Length 给出枚举中元素的数量,而不管枚举中的间隙如何
标签: c# validation asp.net-mvc-5