6

バウンティが授与された後の更新

この問題に新しい解決策が登場しています。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」を参照してください。

4

3 に答える 3

5

これはサポートされていません。プロパティ レベルの検証のいずれかが失敗した場合、クラス レベルの検証は実行されません。MVC Foolproof Validationをご覧になることをお勧めします。MVC 検証を拡張して、条件付きプロパティ検証のサポートを追加します。これで、この特定のケースの問題が解決すると思います。

プロジェクト サイトには、MVC2 RC では動作しないと記載されているため、ソース コードをダウンロードして実行し、アイデアを自分で採用する必要があります。

于 2010-06-28T18:06:46.140 に答える
0

あなたの例から、「他の入力ボックスのエントリを確認する」ボックスが必要な場合、正しい実装は次のようになります

 [EqualTo("Email", ErrorMessage = "E-mailadresserne skal være ens")]
 public string EmailConfirm { get; set; }

「エラー」は確認ボックスの検証であるためです。言い換えると、確認ボックスの横にエラー メッセージが表示され、[電子メール] ボックスと同じではないというメッセージが表示されます。

これにより、検証構成がプロパティに戻され、問題が解決されます。

于 2010-07-05T14:29:46.477 に答える