Пользовательский ModelBinder для локализации DateTime

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

person djbme    schedule 07.02.2012    source источник


Ответы (1)


Кажется, JS - единственный способ сделать это. Я думал, что ответ выше просто возвращает значение, установленное конструктором модели.

person djbme    schedule 10.02.2012