まず第一に、データ注釈ベースのモデル検証が ASP.NET MVC4 でどのように機能するかを理解し、それを .NET で正常に実装したと言わざるを得ませんDataAnnotationsModelValidatorProvider
。そのため、セットアップの支援は必要ありません。
しかし、 になるHtmlHelpers
と、エラー メッセージのコンテキストを把握するのに苦労しています。と言うcontext
のは、どのエラーについて話しているかを意味します。エラーを返した属性はどれですか?
私が得ることができるのはKey
、エラーと現在ErrorMessage
のものですが、プログラム的には、私が話しているエラーを伝えるものは何もありません。それがRequired
属性であろうと他の属性であろうと、それらを区別する方法を見つける方法はありません。
シナリオを少し開いてみましょう。要素HtmlHelpers
をレンダリングするカスタムがあります。ContentEditable
たとえばHtml.ContentEditableValidationMessageFor(m => m.firstName);
。次のような出力が得られます。
<span contenteditable="true" data-valmsg-for="firstName" data-valmsg-replace="Please provide first name" class="field-validation-error">Please provide first name</span>
現在、contenteditable
要素の変更を処理して永続化するための jQuery プラグインがあり、それらをバックエンドに永続化します。ただし、UI には、どのエラー メッセージについて話しているかを示すものは何もありません。人間はそれが であることを簡単に確認できますが、プログラム的には、たとえばRequiredAttribute
いくつかのものと区別するためのデータがありません。MinLengthAttribute
このシナリオでは、単純に をdata-valmsg-for="firstName"
ローカライズのキーとして使用すると、同じプロパティに関するすべてのエラーに対して同じエラー メッセージが返されます。
丸めるには
ModelState
ModelError の一意の ID を発行するためのベスト プラクティスはありますか? ASP.NET MVC4 とDataAnnotationsModelValidatorProvider
.
ModelState
「一緒にハックする」方法はたくさん考えられますが、MVC が提供するものは何でも使用したいと思います。すべてが custom を書くことに帰着するならModelValidatorProvider
、私はそれに対してすべてオープンです。それが最良かつ最も持続可能な方法である限り。私はすべて、今すぐハッキングし、機能し続けるために永遠にハッキングするよりも、今より多くのことを行い、後で行うことを支持します