far*_*yad 9 c# asp.net asp.net-mvc datetime date
我正在尝试处理日期值的用户输入,我想提示用户以这种格式输入日期: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);
}
Run Code Online (Sandbox Code Playgroud)
模型中的出发日期:
[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; }
Run Code Online (Sandbox Code Playgroud)
在视图中:
<div class="col span-1-of-2">
@Html.LabelFor(m => m.DesignVacation.DepartureDate)
@Html.EditorFor(m => m.DesignVacation.DepartureDate)
</div>
Run Code Online (Sandbox Code Playgroud)
它以月(mm)开头,但我想要的是这种格式:dd/MM/yyyy
如何使用editorFor获取此格式(如果可能,使用textboxFor).
小智 9
您通过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; }
Run Code Online (Sandbox Code Playgroud)
并且日期将显示在用户设备的文化中,这是HTML-5日期选择器的用途.
请注意,您不需要自定义模型绑定器(日期将以ISO格式发布,并且将被正确绑定DefaultModelBinder).
但请注意,HTML-5日期选择器仅在Chrome和Edge中受支持,而普通文本框将在Firefox中显示(例如).如果您想要一致的UI,那么建议您使用jquery datepicker插件(例如jquery-UI),但您还需要重新配置验证器以进行客户端验证(请参阅此答案以获取示例).
如果您查看DisplayFormatAttribute.DataFormatString 属性的文档,您会看到
\n\n\n\n\n获取或设置字段值的显示格式。
\n
没有提到它会改变 的设计格式datepicker,它只是改变值的格式。因为您正在获取日期,所以HTML 5 date picker无法更改其格式有没有办法更改输入 type=\xe2\x80\x9cdate\xe2\x80\x9d 格式?\n并且有些浏览器不支持HTML 5 date picker,但你可以使用jquery date picker
添加这个head
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">\n<script src="https://code.jquery.com/jquery-1.12.4.js"></script>\n<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>\nRun Code Online (Sandbox Code Playgroud)\n\n并在body
@Html.TextBoxFor(m => m.DesignVacation.DepartureDate)\nRun Code Online (Sandbox Code Playgroud)\n\n最后添加script
<script>\n\n $(function(){\n\n $(\'#DesignVacation_DepartureDate\').datepicker({\n dateFormat: \'dd/mm/yy\'\n });\n\n});\n\n</script>\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
20680 次 |
| 最近记录: |