После некоторых копаний я закончил тем, что установил Thread
для значения CurrentCulture значение CultureInfo ("en-US") в методе действия контроллера:
Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US")
Вот несколько других вариантов, если вы хотите, чтобы этот параметр был в каждом представлении.
О CurrentCulture
стоимости недвижимости:
Объект CultureInfo , возвращаемый этим свойством, вместе со связанными с ним объектами определяет формат по умолчанию для дат, времени, чисел, денежных значений, порядка сортировки текста, соглашений о регистре и сравнения строк.
Источник: MSDN CurrentCulture.
Примечание . Предыдущее CurrentCulture
значение свойства, вероятно, является необязательным, если контроллер уже работает с CultureInfo("en-US")
форматом даты или аналогичным ему "MM/dd/yyyy"
.
После установки CurrentCulture
свойства добавьте блок кода для преобразования даты в "M/d/yyyy"
формат представления:
@{
var shortDateLocalFormat = "";
if (Model.AuditDate.HasValue) {
shortDateLocalFormat = ((DateTime)Model.AuditDate).ToString("M/d/yyyy");
}
}
@shortDateLocalFormat
Сверху @shortDateLocalFormat
переменная отформатирована ToString("M/d/yyyy")
произведениями. Если ToString("MM/dd/yyyy")
используется, как я сделал вначале, тогда у вас будет нулевая проблема . Также, как рекомендовано Томми, ToString("d")
тоже работает. Фактически "d"
означает «Краткий шаблон даты» и может использоваться с различными культурными / языковыми форматами.
Я предполагаю, что блок кода сверху также можно заменить каким-нибудь классным вспомогательным методом или чем-то подобным.
Например
@helper DateFormatter(object date)
{
var shortDateLocalFormat = "";
if (date != null) {
shortDateLocalFormat = ((DateTime)date).ToString("M/d/yyyy");
}
@shortDateLocalFormat
}
может использоваться с этим вспомогательным вызовом
@DateFormatter(Model.AuditDate)
Обновление , я обнаружил, что есть альтернативный способ сделать то же самое, когда используется метод DateTime.ToString (String, IFormatProvider) . При использовании этого метода , то нет никакой необходимости использовать Thread
«s CurrentCulture
собственности. CultureInfo("en-US")
Передается в качестве второго аргумента -> IFormatProvider к DateTime.ToString(String, IFormatProvider)
методу.
Модифицированный вспомогательный метод:
@helper DateFormatter(object date)
{
var shortDateLocalFormat = "";
if (date != null) {
shortDateLocalFormat = ((DateTime)date).ToString("d", new System.Globalization.CultureInfo("en-US"));
}
@shortDateLocalFormat
}
.NET Fiddle
No overload for method 'ToString' takes 1 arguments