Где лучше всего отформатировать свойства модели в ASP.NET MVC (3)? - PullRequest
14 голосов
/ 23 сентября 2011

В последнее время я много раз искал лучшие практики в рамках ASP.NET MVC, особенно в отношении беспокойства. Мой вопрос здесь, если у меня есть свойство в модели, где лучше всего выполнить форматирование для этого свойства?

Я думал о нескольких вариантах, но не уверен, что лучше. В примере используется DateTime. Извините, это немного затянулось.

Вариант 1: По мнению: @Model.TheDate.String("{0:'blah'dd/MM/yyyy}") Я знаю, что это неправильно, потому что здесь не должно быть строки формата (что, если я хочу изменить формат во всем приложении)

Вариант 2: Метод расширения, используемый в представлении: @Model.TheDate.DisplayItNicePlease() Этот вид имеет смысл, потому что представление выбирает метод расширения, который будет использоваться для форматирования, а модель представления просто выставляет свойство даты представлению. Не уверен, что представление или модель представления должны отвечать за форматирование.

Вариант 3: В методе Html Helper, например, что-то вроде Где я должен разместить декларативные HTML-помощники в ASP.NET MVC 3 , чтобы вы могли использовать:

@Html.DisplayDateNice(Model.TheDate)

Вариант 4: Дополнительное свойство в модели представления для ее форматирования и возврата строки, например ::1010 *

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. Мне кажется, что это может быть самым хорошим решением и хорошо работает, если вы просто хотите простое форматирование строки. Я думаю, что это усложняется, если вы хотите что-то более сложное, например, показывать относительное время ( Рассчитать относительное время в C # ), и в этом случае, возможно, лучше всего использовать метод расширения / html helper.

Возможно, есть и другие способы, о которых я даже не подозреваю ...

Ответы [ 2 ]

3 голосов
/ 23 сентября 2011

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

1 голос
/ 23 сентября 2011

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

@Model.TheDate.ToDateString()

Но в целом, я все же предпочитаю option5, потому что я создаю view-модели для каждой страницы и просто добавляю атрибут DisplayFormat.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...