Используя ModelMetadata, как вы вызываете DisplayFor и используете ли метаданные - PullRequest
2 голосов
/ 10 июня 2010

Этот вопрос основан на использовании шаблона отображения табличного макета 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?

Ответы [ 3 ]

1 голос
/ 15 ноября 2012

Я боролся с этим сам в течение нескольких часов, и это единственный хит, который я нашел в Google. Но ответ неверный.

propertyMetadata.TemplateHint всегда null в моем случае.

Но это работает:

Html.DisplayFor(m => propertyMetadata.Model, propertyMetadata.DataTypeName)
1 голос
/ 15 июня 2011

Кажется, это просто, вам просто нужно изменить:

Html.DisplayFor(m => propertyMetadata.Model)

на

Html.DisplayFor(m => propertyMetadata.Model, propertyMetadata.TemplateHint)
0 голосов
/ 16 мая 2014

вы можете проверить @Html.ValueFor(m => propertyMetdata.Model) вместо DisplayFor.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...