Недавно я много искал как лучшие практики в рамках ASP.NET MVC, в частности, вокруг раздувания беспокойства. Мой вопрос здесь, если у меня есть свойство на модели, где лучше всего сделать какое-то форматирование на этом свойстве?
Я подумал о нескольких вариантах, но не уверен, что лучше. В этом примере используется DateTime. Извините, это немного задержалось.
Вариант 1:
В представлении: @Model.TheDate.String("{0:'blah'dd/MM/yyyy}")
Я знаю, что это неправильно, потому что строка формата не должна быть здесь (что, если я хочу изменить формат во всем приложении)
Вариант 2:
Метод расширения, используемый в представлении: @Model.TheDate.DisplayItNicePlease()
Такой подход имеет смысл, поскольку в представлении используется метод расширения, который используется для форматирования, и viewmodel просто предоставляет свойство даты для представления. Не уверен, что модель представления или представления должна нести ответственность за форматирование.
Вариант 3: В методе Html Helper, т.е. Что-то вроде Где я должен разместить декларативные HTML-помощники в ASP.NET MVC 3, чтобы вы могли использовать:
@Html.DisplayDateNice(Model.TheDate)
Вариант 4: Дополнительное свойство в модели представления для его форматирования и возврата строки, например:
public string TheDateStr
{
get
{
return TheDate.DisplayItNicePlease();
}
}
И тогда в представлении вы просто
@Model.TheDateStr
Довольно похоже на вариант 3 только он сохраняет представление действительно, очень просто - представление буквально просто выводит то, что находится в модели, и не заботится о формате данных.
Вариант 5: Атрибуты DisplayFormat, например: На модели просмотра:
[DisplayFormat(DataFormatString = "{0:'blah'dd/MM/yyyy}")]
public DateTime TheDate { get; set; }
И затем на вид:
@Html.DisplayFor(m => m.TheDate)
Мне это нравится, кроме того, строка формата не используется повторно, поэтому используйте опцию 5...
Вариант 6:
Какой-то пользовательский DisplayFormatAttribute
, например. NiceDateDisplayFormatAttribute
.
Мне кажется, что это может быть самое приятное решение и хорошо работает, если вы просто хотите простое форматирование строк. Я думаю, что это усложняется, если вам нужно что-то более сложное, например, показывая относительное время (Рассчитать относительное время в С#), и в этом случае, возможно, это лучше всего в расширении method/html.
Есть, вероятно, другие способы, о которых я даже не знаю...