Этот вопрос основан на использовании шаблона отображения табличного макета Asp.Net MVC от Phil Haack http://haacked.com/archive/2010/05/05/asp-net-mvc-tabular-display-template.aspx
Проблема в Html.DisplayFor (m => propertyMetadata.Model).Это отображает данные из свойства просто отлично, однако он не использует какие-либо аннотации данных, которые могут присутствовать.В основном я думаю об аннотации DataType, например, DataType.Date.Эта аннотация правильно выводит короткую дату при использовании с DisplayFor, но не тогда, когда свойство отражается из ModelMetadata, как в этом примере.(Он показывает полный DateTime)
<% for(int i = 0; i < Model.Count; i++) {
var itemMD = ModelMetadata.FromLambdaExpression(m => m[i], ViewData); %>
<tr>
<% foreach(var property in properties) { %>
<td>
<% var propertyMetadata = itemMD.Properties
.Single(m => m.PropertyName == property.PropertyName); %>
<%= Html.DisplayFor(m => propertyMetadata.Model) %>
</td>
<% } %>
</tr>
Примером модели может быть
public class TableModel
{
[UIHint("Table")]
public PeriodModel[] Periods { get; set; }
}
public class PeriodModel
{
[DisplayName("Description")]
public string Description { get; set; }
[DisplayName("Date From")]
[DataType(DataType.Date)]
public DateTime DateFrom { get; set; }
[DisplayName("Date To")]
[DataType(DataType.Date)]
public DateTime DateTo { get; set; }
}
Так как это можно изменить, чтобы получить полное поведение метаданных DisplayFor?