我必须使用以下格式MM/yyyy
捕获DateTime
。我的视图模型看起来像这个
public class SomeViewModel
{
public string Name { get; set; }
[DataType(DataType.Date), DisplayFormat(DataFormatString = "{0:MM/yyyy}", ApplyFormatInEditMode = true)]
public DateTime? TargetMonth { get; set; }
}
然后我有一个名为Date.cshtml
的剃刀编辑器模板,代码如下
@model DateTime?
@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue, new { @class = "form-control", placeholder = ViewData.ModelMetadata.Watermark })
当我选择/键入类似07/2018
的值时,我在客户端验证时会出现以下错误
字段"目标月份"必须是日期。
如何使用MM/yyyy
格式正确捕获月份?
我已经在一个示例项目中复制了您的问题。问题是DisplayFormat属性在TextBox辅助对象(源(中被忽略。
我建议使用现有的日期选择器库,有很多好的解决方案可供选择。我发现了一个使用Bootstrap Datepicker的JS Fiddle,它可以满足您的Month picker需求。
Html:
<input type="text" class="monthPicker" placeholder="CheckIn" >
JS:
$('.monthPicker').datepicker({
autoclose: true,
minViewMode: 1,
format: 'mm/yyyy'
})
您可以更改编辑器模板以使用此日期选择器。
您希望视图模型上的"TargetMonth"属性是字符串,而不是日期。验证字符串以匹配此正则表达式:’[0-1]?[1-9]/[1-2][0-9]{3}'
然后,在数据模型中添加一个get-only属性,该属性解析字符串并返回DateTime实例,或者在将值传递给相应的实体对象以进行存储时执行转换逻辑。