我必须使用以下格式DateTime
捕获MM/yyyy
。我的视图模型看起来像这样
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
格式正确捕获月份?
答案 0 :(得分:1)
我已在一个示例项目中复制了您的问题。问题是TextBox帮助器(source)中的DisplayFormat属性被忽略。
我建议您使用现有的datepicker库,这里有很多不错的解决方案可供选择。我发现有一个JS Fiddle using Bootstrap Datepicker可以满足您的月选择器要求。
HTML:
<input type="text" class="monthPicker" placeholder="CheckIn" >
JS:
$('.monthPicker').datepicker({
autoclose: true,
minViewMode: 1,
format: 'mm/yyyy'
})
您可以更改您的编辑器模板以使用此日期选择器。
答案 1 :(得分:0)
您将希望视图模型上的'TargetMonth'属性为字符串,而不是日期。验证字符串以匹配此正则表达式: '[0-1]?[1-9] / [1-2] [0-9] {3}'
然后在数据模型中添加一个解析字符串并返回DateTime实例的get only属性,或者在将值传递给其对应的实体对象进行存储时执行转换逻辑。