2011-07-20 3 views
1

私はviewModelを持っています。MVCカスタム検証は、編集または挿入するかどうかを判断します。

私は中IValidatableから継承し、いくつかの検証を持っている私のViewModelをした:これは正常に動作しますが、私は唯一の検証は、編集内容を作成していないしたい

public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) 
{ 

    ... 

} 

。私はこれを行う唯一の方法は、このメソッド内でそれが編集か作成かどうかを判断する方法だと考えています。

これを行う方法はありますか、この全部を間違って考えていますか?

答えて

1

作成アクションと挿入アクションに別々のビューモデルを使用します。あなたのバリデーションルールが違うならば、とにかく別のモデルを使う価値があると思います。

public class InsertMyObjectViewModel : IValidatable 
{ 
    [Required] 
    public string Name { get; set; } 

    // note the lack of Required attribute here 
    public string Address { get; set; } 

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) 
    { 
     ... 
    } 
} 

そして、あなたのビジネスルールは、例えば、登録時に顧客の名前ではなく、自分のアドレスを指示する場合、これは意味をなさない可能性が編集

public class UpdateMyObjectViewModel : IValidatable 
{ 
    [Required] 
    public string Name { get; set; } 

    [Required] 
    public string Address { get; set; } 

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) 
    { 
     ... 
    } 
} 

ための別。ただし、ユーザーがアカウントを変更すると、ビジネスルールにアドレスが必要になることがあります。多くの場合、オブジェクトあたり1:1のビューモデル:アクション比を使用することが理にかなっています。

今、Validateロジックを書くと、はるかに簡単になります。少し重複しているかもしれませんが、ビジネスルールが将来変更されるときに変更する方が簡単です。

+0

大変ありがとうございます! – AnonyMouse

関連する問題