У меня есть действие контроллера POST, которое перенаправляет на метод GET, используя RedirectToAction.
return RedirectToAction(SomeActionName, new { date = someModel.someUTCDate });
Я реализовал пользовательский механизм связывания моделей, который анализирует даты, используя предполагаемую информацию о культуре и часовом поясе, поэтому я правильно его перехватываю. Основные шаги в моей задаче:
- Действие POST вызывается со строкой даты / времени, которая является стандартным временем по Гринвичу, если не указано иное
- Пользовательский связыватель модели анализирует эту дату в DateTime с типом Utc, и она правильно привязана в правильном формате к модели
- Действие POST перенаправляет на GET, используя RedirectToAction с датой, которая была привязана как время UTC для модели
- MVC3 теперь пытается связать строковое значение DateTime с месяцем и днем, поменяющимися местами
Где-то между вызовом RedirectToAction и повторным связыванием значения DateTime для действия GET происходит преобразование строки, которое, похоже, меняет местами месяц и день вокруг.
Существует ли простой способ обеспечить правильное преобразование строк без необходимости вручную преобразовывать его для каждого вызова RedirectToAction? Мне бы очень хотелось знать, где происходит преобразование значения маршрута в строку и могу ли я повлиять на него, чтобы выполнить правильное преобразование строки.
Чтобы проиллюстрировать, что у меня получилось немного лучше, у меня есть пользовательское связующее для модели DateTime
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);
}
При перенаправлении я обнаружил, что значение подшивки модели.AttemptedValue является неправильно отформатированной строкой.