Недавно я много искал как лучшие практики в рамках ASP.NET MVC, в частности, вокруг раздувания беспокойства. Мой вопрос здесь, если у меня есть свойство на модели, где лучше всего делать некоторые форматирования на этом свойстве?Где лучше всего отформатировать свойства модели в ASP.NET MVC (3)?
Я подумал о нескольких вариантах, но не уверен, что лучше. В этом примере используется DateTime. Извините, это немного задержалось.
Вариант 1: По мнению: @Model.TheDate.String("{0:'blah'dd/MM/yyyy}")
Я знаю, что это не правильно, потому что строка формата здесь не должно быть (что, если я хочу, чтобы изменить формат на протяжении всего приложения)
Вариант 2: Метод расширения, используемый в представлении: @Model.TheDate.DisplayItNicePlease()
Этот вид имеет смысл, поскольку представление использует метод расширения для использования в форматировании, а viewmodel просто предоставляет свойство даты для представления. Не уверен, что модель представления или представления должна отвечать за форматирование.
Вариант 3: В методе Html Helper, то есть что-то вроде Where should I place Declarative HTML helpers in 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
. Мне кажется, что это может быть самое приятное решение и хорошо работает, если вы просто хотите простое форматирование строки. Я думаю, что это усложняется, если вам нужно что-то более сложное, например, показывая относительное время (Calculate relative time in C#), и в этом случае, возможно, это лучше всего использовать в методе расширения/html-помощнике.
Есть, вероятно, другие способы я даже не в курсе ...
ОК, так что вы думаете, что виртуальная машина должна делать форматирование, а не вид? –
Да, потому что тогда одна и та же функция форматирования может использоваться несколько раз в представлении без повторной обработки, и это удерживает обработку Модели в Модели, оставляя представление просто сосредоточенным на части просмотра MVC. –
Спасибо. Таким образом, ответ - дополнительное свойство на виртуальной машине, которая возвращает форматированную строку, но фактическое форматирование внутри этого свойства выполняется методом расширения, поэтому форматирование может быть повторно использовано в приложении. Это имеет смысл .... –