18

我在这里试图找到两天的答案后写这个问题。mvc4 url​​验证

基本上这是发生了什么事情。

我在视图模型的属性如下

[Required(ErrorMessage = "Required Field")] 
[Url(ErrorMessage="Please enter a valid url")] 
[DisplayName("Website")] 
public string web { get; set; } 
在视图

,我有这个

@Html.EditorFor(model => model.web, new { AutoCompleteType = "Disabled", autocomplete = "off" }) 

现在的问题在于如何对这一领域的输入文本中被验证客户端。该字段必须始终具有协议前缀,否则它将变为无效。

我可以解决这个问题的最佳方法是什么?

很多谢谢

回答

30

您可以使用DataAnnotationsExtensions library做到这一点。他们有一个UrlAttribute,您可以配置它只在指定协议时进行验证。该属性还提供客户端验证。你可以看到这里的此行为的示例:http://dataannotationsextensions.org/Url/Create

如下您可以使用此属性:

using System.ComponentModel.DataAnnotations; 

namespace DataAnnotationsExtensions.Core 
{ 
    public class UrlEntity 
    { 
     [Url] 
     [Required] 
     public string Url { get; set; } 

     [Url(UrlOptions.OptionalProtocol)] 
     [Required] 
     public string UrlWithoutProtocolRequired { get; set; } 

     [Url(UrlOptions.DisallowProtocol)] 
     [Required] 
     public string UrlDisallowProtocol { get; set; } 
    } 
} 

你的目的,第一个选项就足够了。

这个库的包(与ASP.NET MVC支持包括在内)可以的NuGet中找到: 安装,包装DataAnnotationsExtensions.MVC3

注:这也正常工作与ASP.NET MVC 4

+2

嗨,谢谢你的回复。我试图使用'[Url(UrlOptions.OptionalProtocol)]'。但是为了使UrlOptions可用,我必须添加'使用DataAnnotationsExtensions',然后'Url'变得模糊。为了纠正这种情况,我使用了'[DataAnnotationsExtensions.Url(UrlOptions.OptionalProtocol)]',但它并没有在前端进行验证。 – Amila 2013-03-07 10:09:11

+1

好吧,直到我发现我在DataAnnotationsExtensions中做了什么错误,我才会合并答案。我从[link](http://dataannotationsextensions.org/Url/Create)中抓取了可选协议的正则表达式,并使用正则表达式数据注释进行验证。现在它工作正常。但我想使用DataAnnotationExtensions中提供的其他注释扩展。所以必须弄清楚发生了什么 – Amila 2013-03-07 13:20:23

+0

@阿米拉我有同样的问题。我用这个定期的表达来代替。不是所有的东西都包括在内,而是完成了工作'[RegularExpression(“^ [(http(s)?):\\/\\ /(www \\。)?a-zA-Z0-9 @:%._ \\ + 〜#=] {2256} \\ [AZ] {2,6-} \\湾([ - α-ZA-Z0-9 @:?%_ \\ +〜#&// =] *)$ “)]' – Lsakurifaisu 2015-11-11 09:23:28

0

不知道我是否完全理解这个问题。您是否想要验证正确形成的网址?如果是这样你可以实现一个正则表达式DataAnnotation如下:

[RegularExpression(@"^http(s?)\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)([a-zA-Z0-9\-\.\?\,\'\/\\\+&%\$#_]*)?$", ErrorMessage = "My Error Message")] 
+0

这不起作用。当我尝试添加作为MVC数据注释的URL正则表达式时,它们都不起作用。 – 2015-09-30 18:56:37

+0

这个似乎对我有用[RegularExpression(“^ [(http(s)?):\\/\\ /(www \\。)?a-zA-Z0-9 @:%._ \\ + 〜#=] {2256} \\ [AZ] {2,6-} \\湾([ - α-ZA-Z0-9 @:?%_ \\ +〜#&// =] *)$ “)] – Lsakurifaisu 2015-11-11 09:20:00