У меня есть форма на сайте ASP.NET MVC, которую я недавно изменил с POST на GET. Однако, когда я это сделал, я понял, что параметры DateTime в соответствующем действии теперь эффективно используют другую культуру — en-US для GET, а не en-GB для POST. Так что в основном день и месяц меняются местами.
Следующие статьи объяснили мне, почему это делается, однако мне нужно было найти способ преодолеть это, не возвращаясь к POST или используя JS для изменения формы перед отправкой.
http://xhalent.wordpress.com/2011/05/14/localization-of-dates-in-asp-net-mvc/ http://weblogs.asp.net/melvynharbour/archive/2008/11/21/mvc-modelbinder-and-localization.aspx
Я создал пользовательскую привязку для DateTime, просто чтобы проверить теорию, но при этом, похоже, проблема была устранена. Кто-нибудь может объяснить, почему это работает?
Пользовательский биндер был в основном следующей строкой в файле global.ascx.cs.
ModelBinders.Binders.Add(typeof(DateTime), new DateTimeModelBinder());
и это для класса DateTimeModelBinder
public class DateTimeModelBinder : IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
return bindingContext.Model;
}
}