【发布时间】: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