我的模型中有以下属性
[required] [DataType(DataType.PhoneNumber,ErrorMessage = "Invalid Phone Number")] public string PhoneNumber { get; set; } [required] [DataType(DataType.EmailAddress,ErrorMessage = "Invalid Email Address")] public string EmailAddress { get; set; }
相应的视图是
<td> Email </td> <td> @Html.EditorFor(model => model.EmailAddress) @Html.ValidationMessageFor(model => model.EmailAddress,"*") </td> </tr> <tr> <td> Phone # </td> <td> @Html.TextBoxFor(model => model.PhoneNumber) @Html.ValidationMessageFor(model => model.PhoneNumber,"*") </td>
当我呈现此页面时,我看到required属性被触发.但是如果我输入无效数据,则DataType属性不会被触发.我看到源代码html,并且看不到任何代码被发出这些验证.
我也有以下作为我看法的一部分
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"/> <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"/>
解决方法
看到这个帖子
Is the DataTypeAttribute validation working in MVC2?
请注意,DataType属性通常用于格式化,不用于验证.在技术上,有各种各样的电子邮件格式和电话号码格式(请参阅这里电子邮件:http://www.regular-expressions.info/email.html).
另外,自定义转换器可以将看似非电子邮件字符串转换成电子邮件(我在域名com = me@domain.com),因此默认验证正则表达式从窗口中飞出.由开发人员使用正确的正则表达式来确定他们的具体目的,并确保他们只接受他们认为准确的地址.