ここでの質問:( MVC3の同じオブジェクトのインスタンスに異なる必須メッセージを表示するにはどうすればよいですか?)2つの答えがあります。
最初の提案は、ViewModelをフラット化することを提案します。私の場合、Person
メンバーをFooModel
2回にコピーすることを意味します。次に、両方にカスタマイズされた検証メッセージを設定できます。私は明らかな理由でこれに反対することにしました(私のPerson
クラスはかなり複雑で、他の場所でも使用されています)。
2番目の答えは、ModelStateのエラーメッセージを変更することを提案しています。これは私が行っていることです。ViewModelが独自の検証を変更する方法をすでに開発しているので、このトリックを追加するのは簡単でした。次のような[DisplayName]属性を追加しました(擬似コード):
class FooModel : ICustomValidation {
[DisplayName("Manager")]
public Person Manager { get; set; }
[DisplayName("Employee")]
public Person Employee { get; set; }
public void HandleValidation(ModelStateDictionary modelState) {
if( modelState.IsInvalidByPrefix("Manager") ) {
modelState.AppendErrorMessageDisplayPrefix( GetLocalisedDisplayName("Manager") );
}
if(modelState.IsInvalidByPrefix( "Employee")){modelState.AppendErrorMessageDisplayPrefix(GetLocalisedDisplayName( "Employee")); }}}