0

データを受け入れる前にカスタム検証を行いたいサブオブジェクト (詳細) のリストを持つオブジェクト (ヘッダー) があります。ModelState.IsValid と TryValidateModel を試しましたが、サブオブジェクト (ヘッダー オブジェクトのみ) で Validate メソッドを起動していないようです。

そのため、送信時に、ヘッダーの検証が開始されますが、サブオブジェクトは発生しません。次に、TryValidateModel を実行すると、(ブレークポイント) 検証メソッドがヘッダーで呼び出されますが、サブオブジェクトでは呼び出されません。

IValidatableObject インターフェイスを介して追加されたカスタム ロジックではなく、注釈付きの検証 (数値などである必要があります) がサブオブジェクトで機能しているようです。どんな助けでも大歓迎です。

4

3 に答える 3

0

ルートオブジェクトに子の検証を妨げるエラーがあるのではないかと思います。アノテーションとIValidatableObjectを使用した再帰的検証を参照してください 。このURLは、そのシナリオに言及し、ルートから子に検証を強制するコードも示しています。

ルートオブジェクトからの検証をトリガーする投稿に従って


  public IEnumerable Validate(ValidationContext validationContext)
    {
        var context = new ValidationContext(this.Details, validationContext.ServiceContainer, validationContext.Items);
        var results = new List();
        Validator.TryValidateObject(this.Details, context, results);
        return results;
    }

于 2012-09-28T05:38:48.703 に答える
0

TryValidateObject はカスタム検証を開始するようには見えず、データ注釈のみですか? 次のようにして、詳細の検証をヘッダー検証に追加する道をたどりました。

foreach (var detail in this.Details)
{
   var validationResults = detail.Validate(validationContext);
   foreach (var validationResult in validationResults)
   {
      yield return validationResult;
   }
}

これは検証に関しては機能しましたが、UI にエラー メッセージが表示されませんでした。UIにValidationMessagesForがありますが。

ここで解決された検証が機能しない: MVC3 マスター詳細検証が表示されない

于 2012-10-08T05:08:15.790 に答える