1

私の多国籍サイトには、住所作成用のフォームがあります。国ごとに検証ルールをカスタマイズしたい (例: FR ZipCode 長さ 8、米国: 10...)、多くの解決策の間で躊躇しています: 国ごとの 1 つの 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 に答える