2011-12-20 23 views
11

私はIValidatableObjectを使って互いのフォーム値を検証しようとしています。特定のフィールドにValidationResultを割り当てて、そのフィールドの隣にエラーメッセージを表示できるようにしたいと思います。ValidationResultを特定のフィールドに割り当てますか?

たとえば、ユーザーにパスワードを2回入力させて、2番目が最初のものと等しくない場合は検証に失敗し、次に2番目のエラーメッセージが表示されます。

しかし、私はこのようにモデルレベルでエラーを割り当てることができるようです。モデルレベルでは、私は@Html.ValidationSummary(true)と表示されるエラーを意味し、それは特定のモデルフィールドに関連付けられていません。

私はValidationResultの宣言を調べましたが、これに役立つプロパティやメソッドはありません。ですから誰でも私にValidationResultをIValidateableObjectのValidateメソッド内の特定のフィールドに割り当てる方法を教えてもらえますか、それが不可能であることを確認することができますか?

(注:私は回避策を探しているわけではありません。たとえば、パスワードの例を扱うフィルターについては答えません。具体的にはIValidateObjectの制限について詳しく知りたいだけです。)

答えて

23

可能ですが、ValidationResultには、関連するプロパティのIEnumarableを受け付けるオーバーロードがあります。

例。

 public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) 
    { 
     if (Password != PasswordConfirmation) 
      yield return new ValidationResult("Password confirmation must match", new[] { "PasswordConfirmation" }); 
    } 
+1

はい!私はちょうどこれを見つけて、自分の答えとして投稿しようとしていた – Faust

関連する問題