После некоторых копаний я закончил тем, что установил 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