我遇到了一個ASP.NET MVC3視圖模型發出的方式非常奇怪的行爲 - 對於一個字段,ModelMetadata不傳播。我在Brad Wilson之後使用模板助手,雖然更新了Razor。這裏是我的視圖模型:從我的ViewModel的一個屬性將不會填充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>
在上述情況下,所有這三個領域都在正確的描述符object.cshtml調用(prop.DisplayName,prop.TemplateHint),但是當第一個屬性 - FamilyName - 傳遞給String.cshtml時,ViewData.ModelMetadata根本不會被填充。因此,該模板無法顯示標籤(「字符串」除外),也不會分配控件的ID等。
Street和DateStarted通常會發出ID和全部。所以我完全不知道爲什麼這個屬性不能設置ViewData屬性 - 我也不知道如何逐步通過Html.Display調用來查看可能發生的事情。
想要下一個地方的任何想法?