最近 POST から GET に変更した ASP.NET MVC サイトにフォームがあります。ただし、これを行ったときに、関連するアクションの DateTime パラメーターが、POST の en-GB ではなく、GET の en-US という別のカルチャを効果的に使用していることに気付きました。つまり、基本的に日と月が入れ替わっています。
次の記事で、これが行われる理由を説明しましたが、送信前に 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;
}
}