0

我在为视图添加日期时遇到了可怕的事情。我希望用户能够输入 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 日更新 -- 仍在寻找建议。有什么想法吗?

4

1 回答 1

0

我认为没有某种扭曲是不可能的。如果您只输入 15 作为年份,引擎/代码应该如何知道它是哪一年。是 2015 年吗?1915 年?2115 ? 您需要传递 4 位数字来创建日期,如果您只有 2 位数字,则无法创建日期。因此,在您的情况下,我将尝试默认并隐藏“20”前缀(假设您只能输入 2000 年的日期)到您的 2 位数年份输入(或使用一点 JavaScript 以某种方式添加它)。

于 2017-01-29T23:45:37.860 回答