我的一个班级中有两个字段用于地址,如
public string Country { get; set; }
[Required(ErrorMessage = "Postcode is required")]
[RegularExpression(@"REGEX",
ErrorMessage = "Please enter a valid UK Postcode)]
public string postcode { get; set;}
但是,如果用户选择英国以外的国家/地区,那么我希望我的邮政编码字段至少忽略REGEX,并且在理想的世界中根据国家/地区使用其他REGEX进行验证。任何人都可以建议模型本身是否可行?
答案 0 :(得分:2)
您可以选择几种不同的选项:
创建100%自定义验证属性,将Required
和RegularExpression
属性组合在一起。因此,在该自定义属性中,您将执行所需的所有验证,并将值与Country
属性进行比较,以根据需要有选择地应用RegEx。
为您关注的每个国家/地区创建一个不同的postcode
属性,并使用类似`RequiredIfAttribute(请参阅RequiredIf Conditional Validation Attribute)来确定实际需要哪个属性。然后,您可以使用Javascript来显示/隐藏相应的输入字段。
答案 1 :(得分:2)
您可以使用IValidatableObject
:
class MyClass : IValidatableObject {
public string Country { get; set; }
[Required(ErrorMessage = "Postcode is required")]
public string postcode { get; set;}
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) {
if (!String.IsNullOrEmpty(Country)
&& !String.IsNullOrEmpty(postcode)) {
switch (Country.ToUpperInvariant()) {
case "UK":
if (!Regex.IsMatch(postcode, "[regex]"))
yield return new ValidationResult("Invalid UK postcode.", new[] { "postcode" });
break;
default:
break;
}
}
}
}