1

我想排除timeDateTime 文本框中的部分,但我不能让它按我想要的方式工作。

这就是我设置字段的方式:

@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总是出现在字段中:

在此处输入图像描述

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

我尝试过的:

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

  • 我试图删除 Jquery 脚本,没有用

P/s:虽然 datetime 文本框time在第一次加载时包含部分,但在从 datepicker 中选择了一个日期后,该time部分就消失了,但是日期格式错误,正如我上面提到的:

在此处输入图像描述

4

1 回答 1

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());
于 2014-11-08T04:17:34.853 回答