У меня есть действие POST контроллера, которое перенаправляется на метод GET с использованием RedirectToAction.RedirectToAction меняет день и месяц на дату
return RedirectToAction(SomeActionName, new { date = someModel.someUTCDate });
Я выполнил заказ модели связующее вещество, которое разбирает даты, используя предполагаемую культуру и часовой пояс информацию, поэтому я перехватывать это правильно. Основные шаги в моей проблеме:
- POST действие вызывается с указанием даты/времени строки, которая GMT стандартное время, если не указано иное
- Обычай модель связующий разбирает эту дату в DateTime с Вида Utc, и это правильно связаны в правильном формате модели
- POST-действие перенаправляет на GET используя RedirectToAction с датой, которая была связана со временем UTC на модели
- MVC3 теперь пытается связать строковое значение DateTime с месяцем и днем обменивается
Где-то между вызовом RedirectToAction и повторением значения DateTime для действия GET происходит преобразование строк, которое, по-видимому, меняет месяц и день.
Есть ли простой способ обеспечить правильное преобразование строк без накладных расходов, связанных с необходимостью его вручную конвертировать для каждого вызова RedirectToAction? Мне бы очень хотелось узнать, где происходит это значение маршрута для преобразования строк, и могу ли я повлиять на него для правильного преобразования строк.
Для того, чтобы проиллюстрировать то, что у меня есть немного лучше, у меня есть обычай DateTime модельную Binder
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
ValueProviderResult value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
if (value == null || string.IsNullOrEmpty(value.AttemptedValue) || value.AttemptedValue == "null")
{
return null;
}
return FormatHelper.ConvertStringFromGMT(value.AttemptedValue);
}
О перенаправлении Я нахожу, что value.AttemptedValue Типовом вяжущего является неправильно отформатированная строка.
Вы имеете в виду, что SomeActionName имеет дату как параметр, и эта дата не связана правильно? –
Я имею в виду, что SomeActionName имеет дату как параметр и что мое пользовательское связующее устройство получает неверно отформатированную строку для привязки для этого значения. Я указываю значение DateTime для параметра date, и оно преобразуется в строковое значение где-то в MVC, который неправильно отформатирован. –
Я думаю, что преобразование выполняется в ModelBinder перед привязкой к вашему параметру действия. Класс DefaultModelBinder использует разные настройки культуры для выполнения преобразований типов из разных областей данных запроса . Значения, полученные из URL-адресов (данные строки маршрутизации и строки запроса), преобразуются с использованием анализа, нечувствительного к культуре, но значения, полученные из данных формы, преобразуются с учетом культуры в учетную запись . –