.NET MVC Web アプリケーションのアクションで暗黙的なバインディングから DateTime を取得しています。問題は、「dd/MM/yyyy」の形式でAjaxを使用してクエリ文字列を送信しているときに、「MM/dd/yyyy」の形式で日付を取得していることです。
これは、POST ではなく GET プロトコルを使用する場合の .NET MVC Binder の既知の問題であることを知っているので、日付を正しい形式に解析するカスタム バインダーを実装しました。コードは次のとおりです。
public class SearchVMBinder:DefaultModelBinder
{
public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
SearchVM result = (SearchVM)base.BindModel(controllerContext, bindingContext);
try
{
result.Date = DateTime.Parse(result.Date.ToString(),CultureInfo.GetCultureInfo("es-ES"));
}
catch(Exception e)
{
NLog.LogManager.GetCurrentClassLogger().Error("Error al hacer el Bind específico de SearchVM. ", e);
}
return result;
}
}
しかし、そのコードでは解析は機能せず、何もしません。「01/04/2014 11:37:00」(4 月) のような日付でテストしており、「result.Date」で「04/01/2014 11:37:00」という日付を取得しています。 (1 月)、解析前と解析後。
問題は、「DateTime.Parse」メソッドが日付を正しく解析しないのはなぜですか?
アップデート:
SearchVM のコードは次のとおりです。
[ModelBinder(typeof(SearchVMBinder))]
public class SearchVM
{
public DateTime Date { get; set; }
public string StudyCaseNumber { get; set; }
public string PatientNumber { get; set; }
public string PatientName { get; set; }
public string PatientFamilyName { get; set; }
public string PatientMothersMaidenName { get; set; }
public string DoctorName { get; set; }
public string RoomName { get; set; }
public E_OrderedBy OrderBy { get; set; }
}
そしてここにコントローラーのアクションのヘッダーがあります:
public ActionResult ListSearch(SearchVM searchFilter)
ありがとうございました。