2011-12-29 4 views
13

Я использую следующий кодПочему DisplayFormat с DataFormatString изменяет «/» (слэш) на «-» (тире)?

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

// View 
@Html.EditorFor(model => model.StartDate) 

форматировать StartDate но результат xx-xx-xxxx вместо xx/xx/xxxx. Как я могу решить эту проблему и всегда использовать формат xx/xx/xxxx?

UPDATE: Изменение культуры в en-US, кажется, работает:

var culture = new CultureInfo(userCulture); 
System.Threading.Thread.CurrentThread.CurrentCulture = "en-US"; 
System.Threading.Thread.CurrentThread.CurrentUICulture = "en-US"; 

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

Если текущая культура сообщает, что дата должна отображаться dd-MM-yyyy, то с использованием DisplayFormat, как указано выше, эффект не действует, и даты не отображаются, как dd/MM/yyyy.

+0

Что вы подразумеваете под «Возможно, я использую другую культуру, и я все еще хочу показать дату по-другому»? –

+0

Представьте, что текущий пользователь использует культуру «pt-PT», затем DisplayFormat продолжает менять ее на «dd-MM-yyyy» (как это должно быть), когда я хочу показать ее так: «dd/MM/yyyy» – Dryadwoods

+0

Немного загадочно, что если культура пользователей говорит о том, что тире должны быть разделителями, вы настаиваете на использовании косой черты. –

ответ

25

Используйте DataFormatString = @"{0:dd\/MM\/yyyy}" вместо этого. Поскольку / идентифицирует символ, который должен быть заменен разделителем дат по умолчанию для текущей культуры, вам необходимо сбежать от него, чтобы он использовался как литерал в формате.

Таким образом, у вас есть фиксированный формат вместо одного, который динамически использует разделитель даты текущей культуры.

Альтернативы спасаясь от / персонажа может быть: DataFormatString = "{0:dd'/'MM'/'yyyy}"

+1

спасибо, это работает на локальной машине, но наш сайт размещен в другой стране, ему нужен формат «MM/dd/yyyy», кроме того, он показывает ошибку проверки. Поле BeginDate должно быть датой. ', Как я могу сделать серию принять формат 'dd/MM/yyyy'? – stom

0

Вы можете изменить его на DataFormatString = "{0:d}"

Это должно дать вам короткий шаблон дат мм/дд/год

+0

Nop, все тот же результат: P спасибо в любом случае. – Dryadwoods

+0

, который может просто дать вам 1 цифру в течение месяца и дня, если она меньше 10 –

+0

, что о DataFormatString = "{0: MM/dd/yyyy}" –

2

Изменения Краткого формат дата сервера»Региональных настроек использовать косые, например, yyyy/MM/dd.
Это решило проблему для меня.

+0

спасибо за комментарий, но это не правильное решение, так как сервер/ферма/облако могут «предоставлять» несколько разных проектов, или рассматриваемое веб-приложение может предлагать многофункциональные функции. – Dryadwoods