如何捕获Asp.Net MVC中的月份/年份?

时间:2018-07-27 21:46:44

标签: c# asp.net-mvc razor

我必须使用以下格式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格式正确捕获月份?

2 个答案:

答案 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属性,或者在将值传递给其对应的实体对象进行存储时执行转换逻辑。