多国家验证规则

时间:2012-04-25 14:10:43

标签: c# .net asp.net-mvc asp.net-mvc-3 data-annotations

在我的多国网站上,我有一个地址创建表单。我希望按国家/地区自定义我的验证规则(例如:FR ZipCode长度8,美国:10 ......),我在许多解决方案之间犹豫不决:一个ViewModel by Country,Parameterized annotation,DataFilter ......有什么想法吗?

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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;

    }

}