Где найти правильное место для форматирования даты / валюты для представлений asp.net mvc? - PullRequest
1 голос
/ 03 марта 2010

С учетом доменного объекта:

class BirthdayDomain
{
    public DateTime Birthday { get; set; }

    public decimal BirthdayPresent { get; set; }
}

У меня есть два варианта передачи этого в строго типизированное представление:

1

class BirthdayView
{
    public DateTime Birthday { get; set; }

    public decimal BirthdayPresent { get; set; }
}

и в представлении

<%: Model.Birthday.ToString("d"); %>
<%: Model.BirthdayPresent.ToString("C2"); %>

2

class BirthdayView
{
    public string Birthday { get; set; }

    public string BirthdayPresent { get; set; }
}

и в контроллере (например)

BirthdayDomain bd = Repository.GetBirthday(.....)
BirthdayView bv = new BirthdayView()
                  {
                       Birthday = bd.Birthday.ToString("d");
                       BirthdayPresent = bd.BirthdayPresent.ToString("C2");
                  }

и в представлении просто выведите строки.

У меня такой вопрос: если я хочу поддерживать текущие настройки локали пользователя (браузера?), Чтобы даты и валюты отображались так, как вы ожидаете, где лучшее место для этого? Это можно сделать либо в виде, либо в контроллере? Каков общепринятый метод для этого?

Ответы [ 3 ]

2 голосов
/ 04 марта 2010

Если вы хотите поддерживать язык браузера, укажите это в вашем файле web.config:

<globalization culture="auto" />

А по вашему мнению:

<%= Html.Encode(DateTime.Now.ToString()) %>

Заголовок запроса ACCEPT-LANGUAGE будет использоваться для установки культуры и соответственно форматирования даты.

0 голосов
/ 03 марта 2010

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

EDIT

Вы также можете изменить текущую культуру пользовательского интерфейса Thread в своем контроллере, если вы не хотите указывать, какую культуру использовать каждый раз, когда в ваших представлениях есть ToString.

0 голосов
/ 03 марта 2010

Как правило, вы хотите сделать все ваши манипуляции со строками в вашей модели. Когда ваш контроллер создает новую модель, передайте ей локальную информацию, чтобы модель могла правильно отформатировать дату для вас. Другим вариантом может быть то, что модель извлекает локальную информацию из контекста запроса. Просто убедитесь, что ваша логика включена в модель.

...