如何在Asp.NetMVC中捕获月/年



我必须使用以下格式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实例,或者在将值传递给相应的实体对象以进行存储时执行转换逻辑。

最新更新