使用Jquery Datepicker的日期格式错误

时间:2014-11-08 03:15:27

标签: jquery datepicker asp.net-mvc-5 date-format html.textboxfor

我想在DateTime文本框中排除time部分,但我无法按照我想要的方式使其工作。

这是我设置字段的方式:

@Html.TextBoxFor(m => m.DateFrom, "{0:dd/MM/yyyy}", new { @class = "datefrom" })
@Html.TextBoxFor(m => m.DateTo, "{0:dd/MM/yyyy}", new { @class = "dateto" })

Jquery脚本:

    $(function () {
        $(".datefrom").datepicker({
            defaultDate: "+1w",
            changeMonth: true,  
            numberOfMonths: 1,
            dateFormat: "dd/mm/yy",
            onClose: function (selectedDate) {
                $("#to").datepicker("option", "minDate", selectedDate);
            }
        });
        $(".dateto").datepicker({
            defaultDate: "+1w",
            changeMonth: true,
            numberOfMonths: 1,
            dateFormat: "dd/mm/yy",
            onClose: function (selectedDate) {
                $("#from").datepicker("option", "maxDate", selectedDate);
            }
        });
    });

现在我遇到了这些问题:

  • time始终显示在字段中:

enter image description here

  • date format错误:我的格式为dd / MM / yyyy,日期为November 8th 2014,但现在日期选择器"认为"它是August 10th 2014。因此,当我使用格式dd/MM/yyyy从datepicker中选择任意日期时,asp.net将使用格式MM/dd/yyyy
  • 对其进行处理

我尝试过:

  • 我尝试使用DataAnnotations[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]:没有工作

  • 我试图删除Jquery脚本,但没有工作

P / s:虽然日期时间文本框在第一次加载时包含time部分,但在从日期选择器中选择日期后,time部分已消失,但日期格式错误为我上面提到过:

enter image description here

1 个答案:

答案 0 :(得分:1)

您的日期未正确绑定的原因是您的日期选择器使用的是dd/MM/yyy格式,但您的服务器使用的是MM/dd/yyyy格式。要使其工作,您可以创建一个自定义模型绑定器来处理DateTime值并将其解析为您想要的格式。

public class CustomDateTimeBinder : IModelBinder
{
  public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
  {
    var value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
    CultureInfo culture = new CultureInfo("en-GB"); // dd/MM/yyyy
    var date = value.ConvertTo(typeof(DateTime), culture);
    return date;
  }
}

并在Global.asax中注册(这意味着它将适用于所有DateTime

ModelBinders.Binders.Add(typeof(DateTime), new YourAssembly.CustomDateTimeBinder());