У меня есть форма на сайте 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;
}
}