2011-09-23 2 views
13

Недавно я много искал как лучшие практики в рамках 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-помощнике.

Есть, вероятно, другие способы я даже не в курсе ...

ответ

2

Либо использовать помощника расширения для форматирования типа, если этот тип форматирования будет использоваться много или добавить дополнительное свойство в модели для вернуть форматированную версию исходного свойства.

+0

ОК, так что вы думаете, что виртуальная машина должна делать форматирование, а не вид? –

+0

Да, потому что тогда одна и та же функция форматирования может использоваться несколько раз в представлении без повторной обработки, и это удерживает обработку Модели в Модели, оставляя представление просто сосредоточенным на части просмотра MVC. –

+0

Спасибо. Таким образом, ответ - дополнительное свойство на виртуальной машине, которая возвращает форматированную строку, но фактическое форматирование внутри этого свойства выполняется методом расширения, поэтому форматирование может быть повторно использовано в приложении. Это имеет смысл .... –

1

Для одного взгляда я лично использую опцию 5: поместив ее в модель представления. Если формат даты используется для нескольких страниц, вы можете создать вспомогательное расширение html для форматирования даты. Таким образом, в представлении, вы бы что-то вроде

@Model.TheDate.ToDateString() 

Но в целом, я до сих пор предпочитают option5, потому что я создаю ViewModels для everypage, и просто бросить атрибут DisplayFormat на нем.

Смежные вопросы