我在为视图添加日期时遇到了可怕的事情。我希望用户能够输入 2015 年 6 月 30 日或 2015 年 6 月 30 日这样的日期,但如果我使用 2 位数日期,验证会一直失败。我试图“告诉”MVC 接受两位数的日期,但它总是失败。有人可以解释如何做到这一点吗?
我的视图是这样设置的(为简洁起见,仅包括麻烦的日期字段):
@model Models.CompanyContracts
@Html.EditorFor(m => m.BegDate)
我从一个简单的模型开始,它的日期字段定义如下:
public DateTime? BegDate { get; set; }
当我输入日期为 2015 年 6 月 30 日或 2015 年 6 月 30 日时,我收到一条错误消息,提示“BegDate 字段必须是日期”;当我输入 6/30/2015 或 06/30/2015 时,我没有收到错误消息。
所以我尝试添加一个类型和显示属性,如下所述:Format datetime in asp.net mvc 4
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:M/d/yy}", ApplyFormatInEditMode = true)]
我在尝试输入 2015 年 6 月 30 日时遇到同样的错误。我尝试了几种不同的格式,包括数据类型而不是显示格式,包括显示格式而不是数据类型,但是每次我都会收到“字段 BegDate 必须是日期”错误。
我尝试了正则表达式验证,但它也失败了(MVC 验证和正则表达式;显然我从http://regexlib.com/DisplayPatterns.aspx?cattabindex=4&categoryId=5&AspxAutoDetectCookieSupport=1获得的正则表达式需要一些工作):
[RegularExpression(@"^((0?[13578]|10|12)(-|\/)(([1-9])|(0[1-9])|([12])([0-9]?)|(3[01]?))(-|\/)((19)([2-9])(\d{1})|(20)([01])(\d{1})|([8901])(\d{1}))|(0?[2469]|11)(-|\/)(([1-9])|(0[1-9])|([12])([0-9]?)|(3[0]?))(-|\/)((19)([2-9])(\d{1})|(20)([01])(\d{1})|([8901])(\d{1})))$", ErrorMessage = "Invalid Date")]
public DateTime? BegDate { get; set; }
有人能告诉我如何让 MVC 接受输入 2 位或 4 位数字的日期吗?
另一个注意事项,没有外部日期选择器。我需要通过简单的文本输入来完成这项工作。一旦我能证明这是可以做到的,我的老板可能会让我花一些时间找出一个日期选择器。谢谢!
-- 2015 年 7 月 20 日更新 -- 有人对此有什么建议吗?我没有在网上找到任何对我有帮助的东西。在这一点上,我很感激任何反馈,让我在其他地方寻找解决方案。
-- 2015 年 7 月 29 日更新 -- 仍在寻找建议。有什么想法吗?