MVC日期验证失败,日期为两位数

时间:2015-06-30 19:46:08

标签: asp.net-mvc asp.net-mvc-4 model asp.net-mvc-validation editorformodel

我很难在视图中添加日期。我希望用户能够输入类似6/30/15或2015年6月30日的日期,但如果我使用2位数日期,则验证会失败。我试过"告诉" MVC接受两位数的日期,但总是失败。有人可以解释如何做到这一点吗?

我的观点是这样设置的(为简洁起见,只包括麻烦的日期字段):

@model Models.CompanyContracts
@Html.EditorFor(m => m.BegDate)

我从一个简单的模型开始,其日期字段定义如下:

public DateTime? BegDate { get; set; }

我收到错误说"字段BegDate必须是日期"当我输入日期为6/30/15或06/30/15;我在2015年6月30日或2015年6月30日进入时没有收到错误。

所以我尝试添加一个类型和显示属性作为描述 这里:Format datetime in asp.net mvc 4

[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:M/d/yy}", ApplyFormatInEditMode = true)]

我在尝试输入6/30/15时遇到同样的错误。我尝试了几种不同的格式,包括数据类型而不是displayformat,包括displayformat而不是数据类型,但我得到"字段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日更新 - 仍在寻找建议。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

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