【问题标题】:MVC date validation fails with a two digit dateMVC 日期验证因两位数日期而失败
【发布时间】:2015-06-30 19:46:08
【问题描述】:

我在为视图添加日期时遇到了麻烦。我希望用户能够输入像 2015 年 6 月 30 日或 2015 年 6 月 30 日这样的日期,但是如果我使用 2 位日期,验证会一直失败。我试图“告诉”MVC 接受两位数的日期,但它总是失败。有人能解释一下如何做到这一点吗?

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

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

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

public DateTime? BegDate { get; set; }

当我输入日期为 2015 年 6 月 30 日或 15 年 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)]

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

【问题讨论】:

  • 我根本无法重现这一点。输入带有 2 位数字的年份可以正常工作。表单是否实际提交并点击了 POST 方法(即客户端验证生成错误还是模型绑定生成错误)?可能您的服务器文化设置为期望日期格式为dd/MM/yyyy 的文化,这意味着6/30/15 将无效(它需要为30/6/15
  • 它永远不会使用 post 方法。每当我输入两位数日期时,屏幕上都会出现错误“BegDate 字段必须是日期”。我还没有点击保存(发布)按钮。还有其他想法吗?

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2012-08-19
    • 1970-01-01
    • 1970-01-01
    • 2017-10-31
    • 1970-01-01
    • 1970-01-01
    • 2019-02-27
    • 2018-08-29
    • 1970-01-01
    相关资源
    最近更新 更多