C# 指定MVC5中的日期格式(dd/MM/yyyy)
我正在尝试处理用户输入的日期值,我想提示用户以以下格式输入日期:dd/MM/yyyy 我想做什么: 我阅读并实施Darin在这个问题上的答案: 这是我的实现: 在Global.asax中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
(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; }