3

ASP.NET MVC3 アプリには、典型的な Name、StreetAddress 1 & 2、City、Region、PostalCode、および Country プロパティを持つユーザー アドレスを表すモデルがあります。モデルには現在、米国の住所に適用される DataAnnotation 属性があります。モデルに含まれる Country 値に応じて異なる検証とメッセージを持つ国際住所をサポートする必要があります。国が米国ではなくインドや日本のような場合、既存の米国の DataAnnotation 属性値を定義して上書きするにはどうすればよいですか?

たとえば、既存の PostalCode プロパティは次のように定義されています。

    private string _postalCode;
    [StringLength(10, ErrorMessage = "Zip Code maximum length 10 characters")]
    [Display(Name = "Zip Code")]
    [Required(ErrorMessage = "Zip Code is required")]
    [RegularExpression(@"^\d{5}(-\d{4})?$", ErrorMessage = "Invalid Zip Code")]
    public string PostalCode
    {
        get { return _postalCode; }
        set
        {
            if (_postalCode != value)
            {
                _postalCode = value;
            }
        }
    }

特定のインドの住所モデルがある場合、郵便番号は次のようになります。

    private string _postalCode;
    [StringLength(6, ErrorMessage = "Postal Code maximum length 6 characters")]
    [Display(Name = "Postal Code")]
    [Required(ErrorMessage = "Postal Code is required")]
    [RegularExpression(@"^([0-9]{6})$", ErrorMessage = "Invalid Postal Code")]
    public string PostalCode
    {
        get { return _postalCode; }
        set
        {
            if (_postalCode != value)
            {
                _postalCode = value;
            }
        }
    }

ユーザーが特定の国を選択したときに、このモデルを使用して適切なクライアント側とサーバー側の検証を実装するにはどうすればよいですか?

国が変更されたときに ajax 呼び出しを実行して更新された部分ビューを取得するか、入力要素の適切な属性を変更してリセットすることでクライアント側のプロンプトと検証を調整できるようにクライアントに十分なデータを送信することを期待しています検証ですが、Model.IsValid() 呼び出しを発行するときにサーバー側モデルを適切に検証するにはどうすればよいですか?

4

1 に答える 1

2

複雑な検証では、 IValidatableObjectインターフェイスを実装するのが最も簡単だと思います

IEnumerable<ValidationResult> Validate(
    ValidationContext validationContext
)

基本的にこのようなもの

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        MyAddress model = validationContext.ObjectInstance as MyAddress;
        if (model.Country == "India")
        {
            // validate as india
        }
    }

これは一見デフォルトの検証システムと統合されているため、追加の構成は必要ありません。ただし、これはサーバー側の検証にすぎないことに注意してください。

于 2012-06-01T13:12:19.170 に答える