如何为类属性指定合法字符串值集合?无需自定义验证器可行吗?
无需自定义验证器的实现方案
可以实现,借助.NET内置的验证特性就能完成需求,以下是两种常用方案:
方案一:使用正则表达式验证特性
直接给Brand属性添加RegularExpression特性,通过正则匹配限定合法值集合,示例代码如下:
public class Product { public Guid Guid { get; set; } [Required] [RegularExpression(@"^(Audi|BMW|Mercedes)$", ErrorMessage = "品牌必须是Audi、BMW或Mercedes中的一个")] public string Brand { get; set; } }
该正则会严格匹配字符串是否等于指定的三个品牌之一,若需要忽略大小写,可以添加RegexOptions.IgnoreCase参数,修改为:[RegularExpression(@"^(Audi|BMW|Mercedes)$", ErrorMessage = "品牌必须是Audi、BMW或Mercedes中的一个", Options = RegexOptions.IgnoreCase)]
方案二:改用枚举类型定义合法值
将Brand的类型从string改为自定义枚举,用枚举值直接限定允许的品牌范围,示例代码如下:
首先定义枚举:
public enum BrandEnum { Audi, BMW, Mercedes }
然后修改Product类:
public class Product { public Guid Guid { get; set; } [Required] public BrandEnum Brand { get; set; } }
这种方式下,Brand属性只能取枚举中定义的三个值,模型绑定或验证阶段会自动拦截非法值。如果需要接收字符串形式的枚举值,可配合[EnumDataType(typeof(BrandEnum))]特性,确保字符串能正确转换为枚举并完成合法性验证。
内容的提问来源于stack exchange,提问作者Yoda
相关产品推荐
相关产品推荐

