2011-11-10 6 views
0

ASP.NET MVC3ビューモデルが生成される方法が非常に奇妙です.1つのフィールドに対して、ModelMetadataは伝播されません。私はBrad Wilsonの後にテンプレートヘルパーを使用していますが、Razor用に更新されました。ここに私のビューモデルです:私のViewModelのプロパティの1つがModelMetadataに設定されません

public class FamilyBaseViewModel : ViewModelBase 
{ 
    [Display(Order = 10)] 
    public string FamilyName { get; set; } 

    [Display(Order = 30)] 
    [StringLength(50, ErrorMessage = "Street name can only be 50 characters long.")] 
    public string Street { get; set; } 
} 

public class FamilyPrivateViewModel : FamilyBaseViewModel 
{ 
    [Display(Name = "Date Started", Order = 20)] 
    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:d}")] 
    [DataType(DataType.Date)] 
    public DateTime? DateStarted { get; set; } 
} 

object.cshtmlテンプレートは、プロパティを通じて実行され、それらを表示するHtml.Displayを使用しています。

上記のシナリオで
// object.cshtml 
<ol> 
      @foreach (var prop in 
      ViewData.ModelMetadata.Properties.Where(pm => pm.ShowForDisplay 
          && !ViewData.TemplateInfo.Visited(pm) 
          && pm.ModelType != typeof(System.Data.EntityState))) 
      { 
       <li> 
       @Html.Display(prop.PropertyName) 
       </li> 
      } 
     </ol> 

、すべての3つのフィールドが右記述子を持っていますobject.cshtmlの呼び出し(prop.DisplayName、prop.TemplateHint)。ただし、最初のプロパティ - FamilyName - がString.cshtmlに渡されると、ViewData.ModelMetadataはまったく取り込まれません。その結果、テンプレートはラベル(「文字列」を除く)を表示することも、コントロールのIDなどを割り当てることもできません。

StreetとDateStartedは、IDとallで正常に出力されます。だから私は完全に1つのプロパティがViewDataプロパティを設定するのに失敗し、Html.Displayの呼び出しをどのように実行して何が起こっているのかを知ることができないということを忘れています。

次に見たい場所はありますか?

答えて

0

だから、問題は無関係な理由のためのViewData値のために「FamilyNameで」使用コントローラのアクション、にあった:

 ViewBag.FamilyName = familyName; 

そして、これがすべて一体と同じでモデルフィールドのマッピングに緩い破る原因name - つまり、ModelMetadataは伝播しません。したがって、レッスンは次のとおりです。ビューモデルのフィールドと同じ名前のViewData辞書アイテムキーを与えないでください。

関連する問題