【问题标题】:MVC DataAnnotations URL validationMVC DataAnnotations URL 验证
【发布时间】:2011-10-31 00:04:17
【问题描述】:

我正在使用 ASP.NET MVC3 并尝试使用 DataAnnotationsExtensions 验证 URL 字段

这几乎是我需要的。但是,它会强制用户在 URL 字符串的开头添加“http://”,如果没有,它将显示以下验证消息:

The URL field is not a valid fully-qualified http, https, or ftp URL.

在 Data Annotations Extensions URL demo page 中,它显示了一个额外的验证器 UrlWithoutProtocolRequired,但我在任何地方都找不到它。

如何使用此验证器,或者如何在没有“http://”部分的情况下轻松验证 URL?

【问题讨论】:

    标签: asp.net-mvc-3 data-annotations


    【解决方案1】:

    DataAnnotationsExtensions 的无协议选项在源代码中可用,但被视为 beta 版或“vNext”,尚未作为 NuGet 包的一部分发布。因此,如果您下载源代码并进行编译,您会看到 [Url] 属性有一个重载 [Url(requireProtocol: false)]。您可以在最新的 UrlAttribute.cs 文件 (UrlArribute.cs) 中看到这一点。此外,如果您查看 DataAnnotationsExtensions wiki,您会看到此功能计划很快发布(我正在考虑在接下来的一两周内发布正式的下一个版本)。

    【讨论】:

      【解决方案2】:

      只是为了完成这个:

      由于 MVC3 现在我们可以使用 [URL] 验证属性。

      [Required]
      [Url]
      public string Website { get; set; }
      

      【讨论】:

      • 叮叮叮!我们有一个赢家!
      • 有没有办法让它成为可选的?
      【解决方案3】:

      我找不到与 URL 匹配并接受协议作为可选的内置属性。

      因此,我使用了以下正则表达式验证器:

      public class MediaModel
      {
          public long MediaId { get; set; }
          [StringLength(60)]
          [RegularExpression(@"((([A-Za-z]{3,9}:(?:\/\/)?)(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-]+|(?:www.|[-;:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[\w]*))?)", ErrorMessage = "Not a valid website URL")]
          public string Website { get; set; }
          [DisplayName("YouTube Video")]
          [StringLength(200)]
          [RegularExpression(@"((([A-Za-z]{3,9}:(?:\/\/)?)(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-]+|(?:www.|[-;:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[\w]*))?)", ErrorMessage = "Not a valid YouTube video")]
          public string YouTubeVideo { get; set; }
      }
      

      我从here复制了正则表达式,很好。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-08-23
        • 1970-01-01
        • 2011-02-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-26
        相关资源
        最近更新 更多