【问题标题】:ASP.Net MVC3 Email/Phone Data Annotations don't workASP.Net MVC3 电子邮件/电话数据注释不起作用
【发布时间】:2011-04-12 02:53:06
【问题描述】:

我的模型中有以下属性

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

    }

对应的View是

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

【问题讨论】:

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


    【解决方案1】:

    您可以考虑使用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; }
    }
    

    【讨论】:

      【解决方案2】:

      看到这篇文章:

      Is the DataTypeAttribute validation working in MVC2?

      请务必注意,DataType 属性通常用于格式化目的,而不是用于验证。从技术上讲,有多种电子邮件格式和电话号码格式(请参阅此处的电子邮件:http://www.regular-expressions.info/email.html)。

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

      【讨论】:

        【解决方案3】:

        关于这个问题,有一些第三方数据验证注解可以在http://dataannotationsextensions.org/下载

        【讨论】:

          【解决方案4】:

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

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

          正在使用 jquery validate javascript 库

          【讨论】:

          • 电子邮件输入类型是 HTML 5 特定的——它只是在旧浏览器中呈现为常规文本框。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-11-12
          • 1970-01-01
          • 2016-01-01
          • 1970-01-01
          • 2014-07-05
          • 2016-08-30
          • 1970-01-01
          相关资源
          最近更新 更多