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)]