我的模型中有以下属性
[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>
当我渲染此页面时,我看到必需属性被触发。但是如果我键入无效数据,则不会触发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"/>
答案 0 :(得分:16)
您可以考虑使用ASP.NET MVC 3 Futures。 Here是一篇很好的文章,描述了那里的验证:
public class UserInformation
{
[Required]
public string Name { get; set; }
[Required]
[EmailAddress]
public string Email { get; set; }
[Required]
[Url]
public string Website { get; set; }
[Required]
[CreditCard]
public string CreditCard { get; set; }
[Required]
[FileExtensions(Extensions = "jpg,jpeg")]
public string Image { get; set; }
}
答案 1 :(得分:10)
见这篇文章:
Is the DataTypeAttribute validation working in MVC2?
重要的是要注意DataType属性通常用于格式化目的,而不是用于验证。从技术上讲,有各种各样的电子邮件格式和电话号码格式(请参阅此处了解电子邮件:http://www.regular-expressions.info/email.html)。
此外,可以使自定义转换器将看似非电子邮件的字符串转换为电子邮件(我在domain dot com = me@domain.com),因此具有默认验证正则表达式会飞出窗口。由开发人员根据其特定目的使用正确的正则表达式,并确保他们只接受他们认为准确的地址。
答案 2 :(得分:10)
与此问题相关,有一些第三方数据验证注释可供http://dataannotationsextensions.org/下载
答案 3 :(得分:7)
我自己也遇到过类似的问题。我使用数据类型的电子邮件进行了模型设置,但未将其验证为电子邮件。我在html中注意到,视图生成的电子邮件地址的文本框有一种文本。然后,我改变了我的观点,如下所示,这修复了它:
@Html.TextBoxFor(m => m.Email, new { type = "email" })
使用jquery验证javascript libary