2012-02-06 14 views
1

との部分的なビューを使用してエラーメッセージが表示されない:ASP.NET MVC - 私はこのようなASP.NETのViewModelを持ってTemplateInfo

public class ParentViewModel 
{ 
    public ChildViewModel Child { get; set; } 
} 

順番にChildViewModelクラスは必須の属性で装飾され、適切なされている特性を有していますエラーメッセージ。このようにViewModelを設定する理由は、ChildViewModelが部分ビューに結びついており、部分ビューが別のコンテキストでレンダリングされるためです。 1つの文脈では、私のようなChildViewModelの部分ビューをレンダリングしています:

@Html.Partial("~/Views/Shared/_ChildView.cshtml", Model.AddressModel, new ViewDataDictionary 
    { 
     TemplateInfo = new System.Web.Mvc.TemplateInfo { HtmlFieldPrefix = "Child" },     
    }) 

TemplateInfoは、それらが正しくポスト背面にParentViewModelに再作成されているように、部分図のためのHTMLの入力が正しい名前でレンダリングするようになります。子ビューモデルに情報がない場合(ModelState.IsValidは正しい結果を返します)、ASP.Netは正しくを検出します。ただし、問題は、検証エラーメッセージが表示されないことです。エラーメッセージを表示する方法に関するアイデアはありますか?

+0

まあ、それが役立つかもしれないあなた_ChildView.cshtml code –

答えて

0

これは、すべて本当にこのついて行くには間違った方法です。パーシャルビューの代わりに、テンプレートを使用する必要があります。あなたがChild.cshtmlを作成し、(それは編集者かどうかEditorTemplates)次にDisplayTemplatesに入れた場合

、あなたのコードでは、単にこれを行うことができます:あなたが含まれている場合

@Html.DisplayFor(m => m.Child) 
+0

Thanks、EditorTemplatesについて知りませんでした。 – jmacinnes

1

なぜエディタテンプレートを使用しないのですか?

@Html.Partial("~/Views/Shared/_ChildView.cshtml", Model.AddressModel, new ViewDataDictionary 
{ 
    TemplateInfo = new System.Web.Mvc.TemplateInfo { HtmlFieldPrefix = "Child" },     
}) 

これは恐ろしいように見えるだけでなく、既に判明しているようにいくつかの副作用を示すかもしれません。

方法について:

@Html.EditorFor(x => x.Child) 

クリーナー、それはないですか?今、あなたがしなければならないすべては~/Views/Shared/EditorTemplates/ChildViewModel.cshtml~/Views/Shared/_ChildView.cshtmlを移動することです:

@model ChildViewModel 
... 
関連する問題