2015-03-09 2 views
1

Я использую дату в форме ASP.NET.Как отображать дату и время в входе с определенным форматом

Я хочу показать дату с французским форматом (день/месяц/год) в пользовательском интерфейсе и получить его в контроллере с привязкой к модели с этим.

Я эту модель собственности:

[DisplayFormat(DataFormatString = "{dd/MM/yyyy}", ApplyFormatInEditMode = true)] 
     public DateTime dateAudit { get; set; } 

То, что я, как начать DateTime.Now и показать в виде:

@Html.TextBox("dateAudit", String.Format("{0:d}", Model.dateAudit.ToShortDateString(), new { @class = "datefield" })) 

да я поместил это в конфиге тоже:

<globalization uiCulture="fr-FR" /> 

Вопрос заключается в том, что указанная дата 3/9/2015, но должна быть 09/03/2015.

Как это исправить?

Заранее спасибо

+0

Вам нужна целая страница/запрос, чтобы быть fr-FR или просто одно поле? –

+0

всего приложения – clement

+0

Вы уверены, что 'CurrentCulture'' 'fr-FR'? –

ответ

1

Поскольку вы используете d standard date and time format и ToShortDateString (которых они являются идентичными), выглядит как ваши CurrentCulture «ы ToShortDateString собственности является M/d/yyyy, и именно поэтому вы получите это представление.

В качестве решения вы можете использовать метод .ToString() для его форматирования;

Model.dateAudit.ToString("dd/MM/yyyy", CultureInfo.InvariantCulture) 

или вы можете избежать / характер, как;

Model.dateAudit.ToString("dd'/'MM'/'yyyy") 
+0

Спасибо за ваш ответ @Soner, но с этим моим связующим веществом моей модели теряется, когда я выбираю 04/03/2015 (4 марта), он понимает 3 апреля, и я не могу выбрать дату после 12 месяца. – clement

+0

@clement Хм, да, возможно. Ответ Ричарда кажется более логичным в таком случае. –

2

Для выхода пользователя всегда поставить соответствующий CultureInfo при вызове String.Format или type.ToString.

Т.е.

String.Format(new CultureInf("fr-FR")., "{0:d}", …) 

Очевидно лучше, чтобы получить право CultureInfo для пользователя, а также повторно использовать экземпляр.

Для клиентского приложения (WPF, WinForms, ...) значения по умолчанию должны быть правильными (то есть CurrentCulture.CurrentCulture); но для Интернета вам нужно проверить предпочтительный локаль пользователя из заголовков HTTP-запроса (я делаю это в начале запроса, с кэшированием преобразования, чтобы сохранить создание огромного количества объектов CultureInfo: cf. flyweight pattern).