在MVC5中指定日期格式(dd / MM / yyyy)

我正在尝试处理日期值的用户输入,我想提示用户以这种格式输入日期:dd / MM / yyyy

我试图做的:

我在这个问题中阅读并实现了Darin的答案: 在asp.net mvc 4中格式化日期时间

这是我的实现:

在Global.asax中

(ControllerContext controllerContext, ModelBindingContext bindingContext) { var displayFormat = bindingContext.ModelMetadata.DisplayFormatString; var value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName); if (!string.IsNullOrEmpty(displayFormat) && value != null) { DateTime date; displayFormat = displayFormat.Replace ("{0:", string.Empty).Replace("}", string.Empty); if (DateTime.TryParse(value.AttemptedValue, CultureInfo.InvariantCulture, DateTimeStyles.None, out date)) { return date; } else { bindingContext.ModelState.AddModelError( bindingContext.ModelName, string.Format("{0} is an invalid date format", value.AttemptedValue) ); } } return base.BindModel(controllerContext, bindingContext); } 

模型中的出发日期:

 [Required(ErrorMessage = "Departure date is required")] [Display(Name = "Departure Date")] [DataType(DataType.Date)] [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)] public DateTime DepartureDate { get; set; } 

在视图中:

  
@Html.LabelFor(m => m.DesignVacation.DepartureDate) @Html.EditorFor(m => m.DesignVacation.DepartureDate)

这是运行视图时的输出: 在此处输入图像描述

它以月(mm)开头,但我想要的是这种格式:dd / MM / yyyy

如何使用editorFor获取此格式(如果可能,使用textboxFor)。

您通过将EditorFor()[DataType][DisplayFormat]属性结合使用来生成浏览器的EditorFor() 。 规范要求格式为yyyy-MM-dd (ISO格式)。 将属性更改为:

 [Required(ErrorMessage = "Departure date is required")] [Display(Name = "Departure Date")] [DataType(DataType.Date)] [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)] public DateTime DepartureDate { get; set; } 

并且日期将显示在用户设备的文化中,这是HTML-5日期选择器的用途。

请注意,您不需要自定义模型绑定器(日期将以ISO格式发布,并且将由DefaultModelBinder正确绑定)。

但请注意,HTML-5日期选择器仅在Chrome和Edge中受支持,而普通文本框将在Firefox中显示(例如)。 如果您想要一致的UI,那么建议您使用jquery datepicker插件(例如jquery-UI),但您还需要重新配置validation器以进行客户端validation(请参阅此答案以获取示例)。

如果你看一下DisplayFormatAttribute.DataFormatString属性的文档,你会看到

获取或设置字段值的显示格式。

没有提到它会改变datepicker的设计格式,它只会改变值的格式。 既然您从HTML 5 date picker获取日期,则无法更改其格式是否有任何方法可以更改输入类型=“日期”格式? 而且有些浏览器不支持HTML 5 date picker但您可以使用jquery date picker

将此添加到head

    

body

 @Html.TextBoxFor(m => m.DesignVacation.DepartureDate) 

最后添加script