C# 指定MVC5中的日期格式(dd/MM/yyyy)

C# 指定MVC5中的日期格式(dd/MM/yyyy),c#,asp.net,asp.net-mvc,date,datetime,C#,Asp.net,Asp.net Mvc,Date,Datetime,我正在尝试处理用户输入的日期值,我想提示用户以以下格式输入日期:dd/MM/yyyy 我想做什么: 我阅读并实施Darin在这个问题上的答案: 这是我的实现: 在Global.asax中 (ControllerContext controllerContext, ModelBindingContext bindingContext) { var displayFormat = bindingContext.ModelMetadata.DisplayFormatS

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

我想做什么:

我阅读并实施Darin在这个问题上的答案:

这是我的实现:

在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; }
鉴于:

 <div class="col span-1-of-2">
                            @Html.LabelFor(m => m.DesignVacation.DepartureDate)
                            @Html.EditorFor(m => m.DesignVacation.DepartureDate)

                        </div>

@Html.LabelFor(m=>m.DesignVacation.DepartureDate)
@Html.EditorFor(m=>m.DesignVacation.DepartureDate)
这是运行视图时的输出:

它以月(mm)开始,但我想要的是以下格式: 年月日


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

如果您查看的文档,您将看到

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

没有提到它将更改
日期选择器的设计格式,它只更改值的格式。由于您是从
HTML5日期选择器
获取日期,因此无法更改其格式,而且某些浏览器不支持
HTML5日期选择器
,但您可以使用
jquery日期选择器

将此添加到
标题中

<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
最后添加
script

<script>

   $(function(){

       $('#DesignVacation_DepartureDate').datepicker({
        dateFormat: 'dd/mm/yy'
    });

});

</script>

$(函数(){
$('#DesignVacation_DepartureDate')。日期选择器({
日期格式:“日/月/年”
});
});

您正在使用
EditorFor()
以及
[DataType]
[DisplayFormat]
属性生成浏览器的HTML5日期选择器。规范要求格式为
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),但您还需要重新配置验证器以进行客户端验证(请参阅示例)

[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; }