web-dev-qa-db-ja.com

Compare属性のカスタムErrorMessageが機能しない

再現する手順:

  1. 個々のユーザーアカウントを使用して新しいMVC5プロジェクトを作成します。
  2. ErrorMessageプロパティのRegisterViewModelで指定されたConfirmPasswordを見てください。 「パスワードと確認パスワードが一致しません。」です。
  3. アプリケーションをビルドして実行し、一致しないパスワードで登録してみてください。モデルで指定されているものの代わりに、「「パスワードの確認」と「パスワード」が一致しません。」というエラーメッセージが表示されます。

ErrorMessage属性のカスタムCompareプロパティが機能していないようです。 ErrorMessageを指定しても、検証では代わりにある種のデフォルトメッセージが表示されます。

これはSystem.Web.Mvc.CompareAttributeで機能しますが、現在は非推奨であり、代わりにSystem.ComponentModel.DataAnnotations.CompareAttributeを使用する必要があります。これは、この問題を示しています。

プロパティにCompare属性を追加し、次のようにErrorMessageを指定します。

[Compare("NewPassword", ErrorMessage = "The new password and confirmation password do not match. I'll even add some random text!")]
public string ConfirmPassword { get; set; }

期待される結果は次のようになります(しかしこれは私が得るものではありません):

Expected result with custom ErrorMessage

代わりに、次の「デフォルト」エラーメッセージが表示されます。

Actual result with standard ErrorMessage

クライアント側の検証は無効になっています。私は何かが足りないのですか?この例は、認証として個々のユーザーアカウントを使用するMVC5テンプレートから抜粋したものです。

19
JLe

これはバグだと思います。 (編集:そうです。)これも再現できます。実際、動作はクライアント側の検証をオンにしてもまったく同じです。生成されたHTMLを見ると、カスタムエラー文字列も生成されていないことがわかります。常にデフォルトのエラー文字列が出力されます。

実際、私は詳細情報を探すために検索したところ、codeplexのバグとして送信されたことがわかりました。それは8日前に報告され、誰かがそれに割り当てられました。バグレポートを見つけることができます ここ

8
John H

私は同じ問題、解決策を持っています:

変化する:

[Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]

に:

[System.Web.Mvc.Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]

動作しています!

14
vietdv

これは 古いバグ 2013年のものです。次のコマンドを試して、すべての プロジェクトの依存関係 を更新してください。

PM> update-package
7
VahidN