私は、AssociatedMetaDataProviderを拡張したカスタムメタデータプロバイダを実装しました。クラスの最初の目的は、プロパティ名を取り、それをパスカルのケースに入れた単語に変換することでした。検証メッセージのカスタムメタデータ
サイトのすべての必須フィールドのラベルに視覚的なインジケータ( '*'文字)を追加するという新しい要件があります。私は、カスタムメタデータプロバイダに次のコードを追加することで、この変更を行うことができます。
PropertyInfo property = containerType.GetProperty(propertyName);
if (property.GetCustomAttributes(typeof(RequiredAttribute), true).Any())
metadata.DisplayName = "* " + metadata.DisplayName;
このコードは、それがすべてのラベルに「*」の文字が追加され、その中で「働きます」。ただし、すべての検証メッセージ(たとえば、Html.ValidationMessageFor(x => x.FirstName)
で使用されているもの)に '*'文字を追加するという副作用があります。この場合、ラベルを '* First Name'にして、エラーメッセージを'*ファーストネームフィールドは必須です'と表示されます。
ラベルのメタデータの一部として '*'文字を追加する方法はありますか?検証メッセージに使用されるプロパティ名、または検証メッセージの作成時にカスタムメタデータを提供する方法はありますか?
私はもともとそれを追加したときと同じように、私はこの回答で同じ予約をしています。しかし、私はより良い解決策を見つけることができませんでしたが、より良い解決策が追加されるまで、それを受け入れられた答えとしてマークしています。 – ajalexander