我通过服务层连接了验证,我的Birthdate属性看起来像这样。
<DisplayName("birthdate")> _
<RegularExpression("^\d{2}\/\d{2}\/\d{4}$", ErrorMessage:="Birthdate is not in the correct format.")> _
<DisplayFormat(ApplyFormatInEditMode:=True, ConvertEmptyStringToNull:=True, DataFormatString:="{0:MM/dd/yyyy}")> _
Public Property BirthDate As DateTime
如果我输入类似12/12/1990
的内容,客户端验证可以正常工作,但是当提交表单时,服务器端验证会跳闸,并且我被告知条目无效。我正在使用jQuery-UI Datepicker输入日期,但是当我禁用datepicker时,问题仍然存在。
我在这里遗漏了什么吗?我认为客户端和服务器端都是一样的。
<击>有感。击>
<击> 可能是因为我在SQL Server数据库中使用 datetime2(0)
吗?
我测试了上述理论无济于事......同样的问题。
如果我删除
<RegularExpression("^\d{2}\/\d{2}\/\d{4}$", ErrorMessage:="Birthdate is not in the correct format.")>
然后表单提交。这显然与正则表达式有关。
以下代码也不起作用,但我想知道是否有办法修改modelState以在传递给IsValid方法之前正确设置日期?
Dim birthdate As String = user.BirthDate
ModelState.Item("BirthDate") = DateTime.Parse(birthdate)
答案 0 :(得分:2)
假设用户在文本字段中输入06/27/2010
并提交表单。
默认模型绑定器运行并尝试绑定用户输入的模型。 BirthDate
属性的类型为DateTime
,您知道此类型包含小时部分。现在BirthDate = 6/27/2010 12:00:00 AM
验证将在下一步开始。 BirthDate
属性使用RegularExpression
属性进行修饰,因此调用IsValid
方法时,字符串值6/27/2010 12:00:00 AM
会因您的模式而失败。
向用户显示相应的错误消息。
因此,使用这个正则表达式属性是有问题的。 RegularExpressionAttribute可以正常使用字符串属性。
如果用户输入无效日期,模型绑定器将在验证发生之前进行抗议。它还会检查您的正则表达式没有的无效日期和月份。