1

我的一个班级中有两个字段用于地址,例如

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 进行验证。谁能建议这在模型本身是否可行?

4

2 回答 2

2

有几个不同的选项供您选择:

  1. 创建一个 100% 自定义验证属性,将RequiredRegularExpression属性组合到您的需要。因此,在该自定义属性中,您将执行所需的所有验证并将值与Country属性进行比较,以根据需要选择性地应用 RegEx。

  2. postcode为您关心的每个国家/地区创建一个不同的属性,并使用类似 `RequiredIfAttribute(请参阅RequiredIf 条件验证属性)之类的东西来确定实际需要哪个属性。然后,您可以使用 Javascript 显示/隐藏相应的输入字段。

于 2013-06-30T18:47:39.993 回答
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;
         }
      }
   }
}
于 2013-06-30T18:48:27.853 回答