2

このモデルクラスを考えてみましょう。

public class FooModel {
     public Person Manager { get; set; }
     public Person Employee { get; set; }
}

public class Person {
     [Required]
     public String Name { get; set; }
}

ユーザーNameがマネージャーのフォームに値を入力したが、従業員は入力しなかった場合、ValidationSummary()はそれ以上修飾せずに「名前が必要です」というメッセージを返します(つまり、Employee.Name設定されていないが明確ではありませんManager.Name)。

この問題にはどのような解決策がありますか?

4

1 に答える 1

0

ここでの質問:( MVC3の同じオブジェクトのインスタンスに異なる必須メッセージを表示するにはどうすればよいですか?)2つの答えがあります。

最初の提案は、ViewModelをフラット化することを提案します。私の場合、PersonメンバーをFooModel2回にコピーすることを意味します。次に、両方にカスタマイズされた検証メッセージを設定できます。私は明らかな理由でこれに反対することにしました(私の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")); }}}

于 2012-09-06T23:44:53.193 に答える