ASP.Net MVC3电子邮件/电话数据注释不起作用

时间:2011-04-12 02:53:06

标签: validation asp.net-mvc-3 razor

我的模型中有以下属性

    [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"/>

4 个答案:

答案 0 :(得分:16)

您可以考虑使用ASP.NET MVC 3 FuturesHere是一篇很好的文章,描述了那里的验证:

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