2012-01-22 16 views
1

自動検証アプリケーションワイド(aaa https://stackoverflow.com/a/6111442/236255)を無効にした後で、DataAnnotationsModelValidatorProviderの作業を手動で行うにはどうすればよいですか。私は一般的に通常のDataAnnotationsベースの検証に加えて、データベースに話をする必要があるビジネス検証を行う必要があり、それがどのように動作するか好きで、その機能を活用したいが、 DataAnnotationsModelValidatorProviderを手動で呼び出す方法(無効にした後)

    1. ので、私は尋ねます。私はL235 DataContextを作成して、IValidatableObject.Validateの方法で処分することができましたが、私のコントローラにサービスとデータコンテキストを注入するというDIパターンに反しているように見えます(私のサービスを作成して処分する静的メソッドデータコンテキスト自体!)。

    私はMVCクライアント検証機能を使用していないことに注意してください(私はすべてのPOSTをajaxとして使用していますので、クライアント側の検証には本当に有益でした)。

  • 答えて

    0

    まず、検証:次に

    var validation = new List<ValidationResult>(); 
    
    bool valid = Validator.TryValidateObject(value, new ValidationContext(value, null, null), validation, validateAllProperties: true); 
    

    、にModelStateに結果をコピーします。それがうまくいくように

    foreach (var item in validation) { 
        IList<string> memberNames = item.MemberNames.ToArray(); 
    
        if (memberNames.Count > 0) { 
    
         for (int i = 0; i < memberNames.Count; i++) 
         controller.ModelState.AddModelError(memberNames[i] ?? "", item.ErrorMessage); 
    
        } else { 
         controller.ModelState.AddModelError("", item.ErrorMessage); 
        } 
    } 
    
    +0

    はい、ありがとう@Maxは、これが見えます。しかし、実際にFluentValidationに切り替わり、すべての検証責任を私のサービスに移しました。 –

    関連する問題