Validation ASP.Net MVC3电子邮件/电话数据批注不';行不通

Validation ASP.Net MVC3电子邮件/电话数据批注不';行不通,validation,asp.net-mvc-3,razor,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 Em

我的模型中有以下属性

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

电子邮件
@EditorFor(model=>model.EmailAddress)
@Html.ValidationMessageFor(model=>model.EmailAddress,“*”)
电话#
@Html.TextBoxFor(model=>model.PhoneNumber)
@Html.ValidationMessageFor(model=>model.PhoneNumber,“*”)
当我呈现这个页面时,我看到所需的属性被触发。但是如果我输入无效数据,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"/>

请参见本帖:

需要注意的是,DataType属性通常用于格式化,而不是验证。从技术上讲,有多种电子邮件格式和电话号码格式(请参见此处了解电子邮件:)


此外,还可以使用自定义转换器将看似非电子邮件的字符串转换为电子邮件(我在domain.com=me@domain.com),从而使默认的验证正则表达式飞出窗口。由开发人员为其特定目的使用正确的正则表达式,并确保他们只接受他们认为准确的地址。

与此问题相关,我自己也遇到了类似的问题。我有一个电子邮件数据类型的模型设置,但它没有被验证为电子邮件。我注意到在html中,视图为电子邮件地址生成的文本框有一种文本类型。然后,我改变了我的观点,如下所示,并修复了它:

@Html.TextBoxFor(m => m.Email, new { type = "email" })

使用jQuery验证JavaScript Labale

可以考虑使用。这是一篇描述验证的好文章:

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; }
}

电子邮件输入类型是特定于HTML5的——在较旧的浏览器中,它只能呈现为常规文本框。