如何在ASP.NETMVC中捕获月/年?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (32)

我必须使用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; }
}

然后我使用以下代码调用razor的编辑器模板:

@model DateTime?
@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue, new { @class = "form-control", placeholder = ViewData.ModelMetadata.Watermark })

当我选择/输入这样的值时,我在客户端验证期间收到以下错误:

字段目标月份必须是日期。

如何使用MM/yyyy格式正确捕获月份?

提问于
用户回答回答于

我已经在示例项目中复制了你的问题。问题是在TextBox助手中忽略了DisplayFormat属性。

我建议去现有的datepicker库,有很多很好的解决方案可供选择。

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

扫码关注云+社区

领取腾讯云代金券