バウンティが授与された後の更新
この問題に新しい解決策が登場しています。ASP.NET MVC 3 Preview 1 を参照してください: http://weblogs.asp.net/scottgu/archive/2010/07/27/introducing-asp-net-mvc-3-preview-1.aspx
Model Validation Improvementsのセクションを見てください。ここに、私の問題の解決策が表示されます。
元の投稿
以前の記事「ASP.NET MVC 2で 2 つのプロパティを検証する方法」を参照して、モデル検証のために 2 つのプロパティを比較する方法を尋ねました。
答えは役に立ちましたが、まったく別の問題が残っていました。
問題: プロパティ レベルの ValidationAttribute にエラーが含まれている場合、クラス レベルの ValidationAttributes は検証されません。
次の点を考慮してください。
[EqualTo("Email", "EmailConfirm", ErrorMessage = "E-mailadresserne skal være ens")]
[EqualTo("Password", "PasswordConfirm", ErrorMessage = "Adgangskoderne skal være ens")]
[Bind(Exclude="UserId")]
public class EditSiteUser
{
[Required(ErrorMessage="Du skal bekræfte adgangskode")]
public string PasswordConfirm { get; set; }
[Required(ErrorMessage="Du skal bekræfte e-mailadressen")]
[Email(ErrorMessage="Ugyldig e-mailadresse")]
public string EmailConfirm { get; set; }
public int UserId { get; set; }
[Required(ErrorMessage = "Du skal indtaste et brugernavn")]
public string Username { get; set; }
[Required(ErrorMessage = "Du skal indtaste en adgangskode")]
public string Password { get; set; }
[Required(ErrorMessage = "Du skal indtaste en e-mailadresse")]
[Email(ErrorMessage = "Ugyldig e-mailadresse")]
public string Email { get; set; }
}
ここには、EmailConfirm と PasswordConfirm を検証する 2 つのクラス レベルの属性があります。
Username のようなフィールドが空でエラーが発生した場合、2 つの EqualTo 属性は検証されません。
この問題を克服するための提案はありますか?
編集: この問題についてさらに情報が必要な場合は、コメントでお問い合わせください。必要な追加情報があれば喜んでお知らせします。
質問:
Q: 「プロパティ レベルのチェックが失敗した場合に、クラス レベルのチェックが検証されることが重要なのはなぜですか?」.
A: 「これはフォームの一部であるため、ユーザーはフォームに情報を入力し、AJAX 経由で返信します。フォームが返されると、現在の問題がすべて表示されます。」
Q: 「クラスに配置した EqualTo 属性とは正確には何ですか?それはカスタム検証属性ですか?そうであれば、どのように機能しますか?それは何をしますか?」
A: EqualTo は、クラス インスタンスの 2 つのプロパティの値を比較するクラス レベルの ValidationAttribute です。同様の実装については、「PropertiesMustMatchAttribute」を参照してください。