ASP.NET MVC Применение DisplayFormat вручную

У меня есть модель со свойством, которое выглядит как что-то вроде:

class PairedData<T>
{
    public T Value {get;set;}
    public bool IsValid {get;set;}
}

В модели у меня есть:

class SomeModel
{
    [UIHint ("PairedInt")]
    public PairedData<int> SomeInt {get;set;}

    [UIHint ("PairedDateTime")]
    [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}"]
    public PairedData<DateTime> SomeDate {get;set;}
}

Затем в моем шаблоне отображения для PairedDateTime у меня есть:

 @model PairedData<DateTime>

 @Html.DisplayFor(m => m.Value)

Проблема в том, что DisplayFor не применяет формат даты. Причина достаточно очевидна - атрибут DisplayFormat находится в SomeDate, а не в свойстве Value, поэтому не читается.

Итак, вопрос в том, есть ли способ заставить DisplayFor читать атрибут откуда-то еще? Или есть способ вручную передать ту же информацию в DisplayFor в шаблоне отображения? Или есть способ применить атрибут к значению только в экземпляре DateTime (я думаю, вряд ли)?

Заранее спасибо.

2 ответа

Вы можете попытаться отформатировать это в представлении, если вы уверены, что это всегда будет DateTime:

@Html.DisplayFor(m => m.Value, "{0:dd/MM/yyyy}", new {maxlength=10})

Это работает, но я бы порекомендовал вам подход, предложенный Дэрилом и bkaid здесь: /questions/41270369/aspnet-mvc-3-universalnyie-shablonyi-otobrazheniya/41270394#41270394

Аннотация DataType предоставит вам формат даты по умолчанию mm/dd/yyyy, и в качестве входных данных для этого будет раскрывающийся список, который в сочетании с DisplayFormat даст вам результаты, которые вы ищете.

[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
Другие вопросы по тегам