20

再現する手順:

  1. 個々のユーザー アカウントで新しい MVC 5 プロジェクトを作成します。
  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; }

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

カスタム ErrorMessage で期待される結果

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

標準の ErrorMessage での実際の結果

クライアント側の検証は無効になっています。何か不足していますか?この例は、個別のユーザー アカウントを認証として使用する MVC 5 テンプレートから取得したものです。

4

4 に答える 4

8

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

実際、より多くの情報を見つけるために検索したところ、codeplex のバグとして提出されていることがわかりました。8 日前に報告され、誰かが割り当てられました。バグレポートはこちらでご覧いただけます

于 2013-11-15T19:19:08.450 に答える
7

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

PM> update-package
于 2014-05-11T12:14:43.923 に答える
-1

代わりに System.ComponentModel.DataAnnotations.Compare を使用してください。System.Web.Mvc.Compare は廃止されたため、上記の比較属性は同じ働きをします。

于 2017-05-11T23:18:11.587 に答える