1

在我的多国站点中,我有一个用于创建地址的表格。我想按国家/地区自定义验证规则(例如:FR ZipCode 长度 8,美国:10...),并且我在许多解决方案之间犹豫不决:按国家/地区的一个 ViewModel、参数化注释、DataFilter...任何想法?

public class Address
{
    [Required]
    public string Name { get; set; }
    [StringLength(lengthByCountry)]
    public string ZipCode { get; set; }
}
4

2 回答 2

1

您可以使用CustomValidationAttribute编写自己的验证器,根据国家/地区对邮政编码进行特定国家/地区的验证。

于 2012-04-25T15:33:38.673 回答
1

如果需要在同一个提交中指定国家和邮政编码,那么我建议让您的模型实现 IValidatableObject,它允许您基于值的组合进行验证。

public class Address : IValidatableObject
{
    [Required]
    public string Name { get; set; }

    public string Country { get; set; }

    public string ZipCode { get; set; }

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {

        var results = new List<ValidationResult>();

        switch (Country)
        {
            case "France":
                if (ZipCode.Length < 8)
                    results.Add(
                        new ValidationResult("French zip codes must be at least 8 characters", new List<string> { "ZipCode" })
                    );
                break;

            case "U.S.":
                if (ZipCode.Length < 10)
                    results.Add(
                        new ValidationResult("American zip codes must be at least 10 characters", new List<string> { "ZipCode" })
                    );
                break;

            // Etc.
        }

        return results;

    }

}
于 2012-04-25T15:34:43.570 回答