Asp.net-MVC теперь позволяет неявное связывание объектов DateTime. У меня есть действие в духе
public ActionResult DoSomething(DateTime startDate)
{
...
}
Это успешно преобразует строку из вызова ajax в DateTime. Однако мы используем формат даты дд / ММ / гггг; MVC конвертируется в MM / dd / yyyy. Например, отправка вызова к действию со строкой «02/09/2009» приводит к значению DateTime «09/02/2009 00:00:00» или 2 сентября в наших локальных настройках.
Я не хочу сворачивать свою собственную подшивку модели ради формата даты. Но кажется излишним изменять действие, чтобы принять строку, а затем использовать DateTime.Parse, если MVC может сделать это за меня.
Есть ли способ изменить формат даты, используемый в привязке модели по умолчанию для DateTime? Разве связщик модели по умолчанию не должен использовать ваши настройки локализации?
источник
Ответы:
Я только что нашел ответ на этот вопрос с помощью более подробного поиска в Google:
У Мелвина Харбора есть подробное объяснение того, почему MVC работает с датами именно так, и как вы можете переопределить это при необходимости:
http://weblogs.asp.net/melvynharbour/archive/2008/11/21/mvc-modelbinder-and-localization.aspx
источник
MM/dd/yyyy
формат, иначе он показывает ошибку проверкиThe field BeginDate must be a date.
, как я могу заставить сервер приниматьdd/MM/yyyy
формат?Я бы установил ваши культуры глобально. ModelBinder возьмите это!
Или вы просто измените это для этой страницы.
Но глобально в web.config думаю лучше
источник
У меня была такая же проблема с привязкой короткого формата даты к свойствам модели DateTime. Посмотрев на множество разных примеров (не только в отношении DateTime), я собрал следующее:
Чтобы сохранить то, как маршруты и т. Д. Регистрируются в файле Global ASAX, я также добавил новый класс sytatic в папку App_Start моего проекта MVC4 с именем CustomModelBinderConfig:
Затем я просто вызываю статический RegisterCustomModelBinders из моего Global ASASX Application_Start следующим образом:
Здесь важно отметить, что если вы напишете значение DateTime в скрытое поле следующим образом:
Я сделал это, и фактическое значение на странице было в формате «MM / dd / yyyy hh: mm: ss tt» вместо «dd / MM / yyyy hh: mm: ss tt», как я хотел. Это привело к тому, что проверка моей модели либо завершилась неудачно, либо вернула неправильную дату (очевидно, поменяв местами значения дня и месяца).
После множества головокружений и неудачных попыток решением было установить информацию о культуре для каждого запроса, сделав это в Global.ASAX:
Это не сработает, если вы вставите его в Application_Start или даже в Session_Start, поскольку это назначает его текущему потоку для сеанса. Как вы хорошо знаете, веб-приложения не имеют состояния, поэтому поток, который ранее обслуживал ваш запрос, не является тем же потоком, который обслуживает ваш текущий запрос, поэтому информация о вашей культуре отправилась в великий сборщик мусора в цифровом небе.
Спасибо: Иван Златев - http://ivanz.com/2010/11/03/custom-model-binding-using-imodelbinder-in-asp-net-mvc-two-gotchas/
гарик - https://stackoverflow.com/a/2468447/578208
Дмитрий - https://stackoverflow.com/a/11903896/578208
источник
В MVC 3 все будет немного иначе.
Предположим, у нас есть контроллер и представление с методом Get
Мы должны добавить ModelBinder
и команда в Application_Start () Global.asax
источник
IModelBinder
, особенно в отношении проверки. Кроме того , он работает только если имя изDateTime
является DATETIME .DateTime?
работает, только если вы добавляете еще один вызов сModelBinders.Binders.Add
помощьюtypeof(DateTime?)
.Также стоит отметить, что даже без создания собственного связывателя модели можно анализировать несколько различных форматов.
Например, в США все следующие строки эквивалентны и автоматически привязываются к одному и тому же значению DateTime:
Я настоятельно рекомендую использовать гггг-мм-дд, потому что он намного более переносимый. Вы действительно не хотите иметь дело с обработкой нескольких локализованных форматов. Если кто-то забронирует рейс 1 мая вместо 5 января, у вас будут большие проблемы!
NB: Я не совсем понимаю, является ли гггг-мм-дд универсальным синтаксическим анализом во всех культурах, поэтому, возможно, кто-то, кто знает, может добавить комментарий.
источник
Попробуйте использовать toISOString (). Возвращает строку в формате ISO8601.
ПОЛУЧИТЬ метод
Javascript
C #
Метод POST
Javascript
C #
источник
Я установил приведенную ниже конфигурацию на свой MVC4, и она работает как шарм
источник
источник
источник
Я установил
CurrentCulture
иCurrentUICulture
свой собственный базовый контроллеристочник