2

xValとここでDataAnnotationsValidationRunner説明する標準を使用して、ドメインオブジェクトから検証エラーを収集し、ASP.NETMVCでモデルを表示します。カスタムDataAnnotationsを使用して、2つのプロパティが一致しない場合に検証ランナーが識別できるようにする方法が必要です。

今、私はランナーの外でそれをすることを余儀なくされています、このように:

if (!(model.FieldOne == model.FieldTwo))
    errors.Add(new ErrorInfo("FieldTwo", "FieldOne must match FieldTwo", model.FieldTwo));

私の質問は次のとおりです:これはプロパティレベルの検証属性を使用して行うことができますか、それともクラスレベルの属性を使用するように強制されますか(この場合、ランナーを変更する必要があります...そして私のフォローアップの質問はどのように最適であるかその場合、それらを取得します)。

ありがとう!

更新: 私はついに、選択した回答に提案を実装するためのオブジェクトクエリを作成する方法を理解しました。興味があれば、このクエリの結果を標準の検証ランナーの結果と連結します。TypeIdをconfirmフィールドプロパティに変更したことに注意してください。

var classErrorQuery =
      from attribute in
          instance.GetType().GetCustomAttributes(typeof (ValidationAttribute), false).Cast
          <ValidationAttribute>()
      where !attribute.IsValid(instance)
      select new ErrorInfo(attribute.TypeId.ToString(), attribute.FormatErrorMessage(string.Empty), instance);
4

1 に答える 1

1

CompareToDataAnnotation属性の記述を参照してください

また、MVC2のデフォルトプロジェクトでAccountMOdelを確認できます。ChangePasswordModelに適用される属性PropertiesMustMatchAttributeがあり、NewPasswordとConfirmPasswordが一致することを検証します。

于 2010-04-07T20:45:36.920 に答える