После некоторого рытья, и я закончил настройку 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"
в представлении:@{ //code block var shortDateLocalFormat = ""; if (Model.AuditDate.HasValue) { shortDateLocalFormat = ((DateTime)Model.AuditDate).ToString("M/d/yyyy"); //alternative way below //shortDateLocalFormat = ((DateTime)Model.AuditDate).ToString("d"); } } @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)
Update, я узнал, что есть альтернативный способ сделать то же самое, когда метод DateTime.ToString (String, IFormatProvider) используется. Когда этот метод используется, нет необходимости использовать свойство
Thread
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 }
@Model.AuditDate.Value.ToString("d")
Additional information: Templates can be used only with field access, property access, single-dimension array index, or single-parameter custom indexer expressions.
– Nick Kahn
23 January 2015 в 18:11
Html.DisplayFor
. Не делай этого. Кроме того, уверены ли вы, что он выбрасывает ошибку на этой строке, а не какое-то другое свойство, которое вы пытаетесь использовать помощник DisplayFor
?
– Tommy
23 January 2015 в 18:14
@Model...
, я получаю эту ошибку: «Модель» конфликтует с объявлением System.Web.Mvc.WebViewPage & lt; TModel & gt; .Model '
– Nick Kahn
23 January 2015 в 18:19