我有一个包含日期时间值的输入框(文本),由于某些原因,当我甚至不需要时,此输入框已经过验证。
我的模型和ViewModel根本没有验证。
在我的Razor视图页面中,我确实有一些输入字段包含:
@Html.ValidationMessageFor(vm => vm.User.Age)
在这个输入上,我试图输入一些字符串,它给了我一个客户端验证警告:
@Html.TextBoxFor(vm => vm.User.BannedDate)
下面是在输入框下面呈现的HTML:
<input data-val="true" data-val-date="The field BannedDate must be a date." id="User_BannedDate" name="User.BannedDate" type="text" value="27/02/2014 12:00:00 AM" class="input-validation-error">
我正在使用Bootstrap,我也有jquery。它可以自动检测吗?
更新
web.config中没有全球化标签
在我的Controller的OnActionExecuting中,我正在设置:
System.Threading.Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("en-CA");
答案 0 :(得分:2)
框架会自动生成这些,因为它会尝试将您放在该文本字段中的任何内容绑定到backing属性。由于BannedDate
是日期且无法接受Tomorrow
之类的值,因此框架确保从客户端提交有效日期。查看您的输出,它不需要这些字段,只有在该字段中输入了某些内容时,它才是日期。
至于Age
属性,如果你没有使用可空int,你会看到以下之一:
1)自动填充为0
2)如果您使用的是可空的int,它可能与BannedDate
相同,因为您必须输入一个整数,而不是32 and a half!
作为可接受的值。
如果这些自动验证没有到位或者客户端上的javascript已关闭,则在绑定期间会收到ModelState
错误,告知您该值对于这些特定字段而言不是可接受的值。