多国家/地区验证规则

本文关键字:验证 规则 地区 国家 | 更新日期: 2023-09-27 18:32:08

在我的多国网站中,我有一个地址创建表单。我想按国家/地区自定义我的验证规则(例如:FR 邮政编码长度 8,美国:10...),我在许多解决方案之间犹豫不决:按国家/地区划分的 ViewModel、参数化注释、数据过滤器......知道吗?

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

多国家/地区验证规则

您可以使用

CustomValidationAttribute编写自己的验证器,该验证程序根据国家/地区对邮政编码进行特定于国家/地区的验证。

如果需要在同一提交中指定国家/地区和邮政编码,那么我建议您的模型实现 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;
    }
}