Почему DisplayFormat с DataFormatString меняет "/" (косая черта) на "-" (тире)? - PullRequest
14 голосов
/ 30 декабря 2011

Я использую следующий код

// 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.

Ответы [ 3 ]

27 голосов
/ 30 декабря 2011

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

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

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

2 голосов
/ 29 ноября 2012

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

0 голосов
/ 30 декабря 2011

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

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

...