26

在试图找到答案两天后,我在这里写了这个问题。

基本上这就是发生的事情。

我在视图模型中有一个属性如下

[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" })

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

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

非常感谢

4

2 回答 2

39

您可以使用DataAnnotationsExtensions 库来做到这一点。它们有一个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 上找到:Install-Package DataAnnotationsExtensions.MVC3

注意:这也适用于 ASP.NET MVC 4

于 2013-03-06T14:20:36.693 回答
0

不确定我是否完全理解这个问题。您是否尝试验证格式正确的 URL?如果是这样,您可以按如下方式实现 RegularExpression DataAnnotation:

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