我正在开发一个ASP.NET MVC4(Razor视图)/ JQuery应用程序,其中我有一个jQuery datepicker控件,连接到 出生日期 属性具有DateTime类型的模型,如下所述:
Html.TextBoxFor(m=>m.DOB, new { @class = "dp", id = "dp1",value="" })
Jquery代码:
$(function() {
$("#dp1").datepicker({
yearRange: "-70:+0",
duration: '',
changeMonth: true,
changeYear:true,
showTime: false,
constrainInput: true,
dateFormat: 'dd-mm-yy'
});
});
型号:
[Display(Name = "Date Of Birth")]
public DateTime DOB { get; set; }
如模型定义所示,我没有使用Required属性修饰DOB属性。问题是,当我点击“提交”按钮时,验证程序始终会抱怨DOB is required
,而不是{{1}}。我能够通过使用Html.TextBox而不是TextBoxFor来绕过这个问题。但是,我需要在这种情况下使用TextBoxFor。
答案 0 :(得分:3)
DateTime 是值类型,例如,整数。因此,默认情况下,MVC的验证模型将根据需要进行标记。你有两个选择。第一个选项:将它放在Global.asax文件的Application_Start()中:
DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;
第二个选项,您可以使用可空类型声明它:
[Display(Name = "Date Of Birth")]
public DateTime? DOB { get; set; }
第一个选项将处理客户端验证,但对于服务器端,它会说,模型状态有错误。第二个选项对客户端和服务器都有效。