mvc4 url​​验证

Ami*_*ila 23 unobtrusive-validation asp.net-mvc-4 jquery-validation-engine

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

基本上这是发生了什么.

我在viewmodel中有一个属性,如下所示

[Required(ErrorMessage = "Required Field")]
[Url(ErrorMessage="Please enter a valid url")]
[DisplayName("Website")]
public string web { get; set; }
Run Code Online (Sandbox Code Playgroud)

在视图中,我有这个

@Html.EditorFor(model => model.web, new { AutoCompleteType = "Disabled", autocomplete = "off" })
Run Code Online (Sandbox Code Playgroud)

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

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

非常感谢

Eri*_*oom 36

您可以使用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; }
    }
}
Run Code Online (Sandbox Code Playgroud)

出于您的目的,第一个选项就足够了.

可以在NuGet上找到此库的包(包含ASP.NET MVC支持):Install-Package DataAnnotationsExtensions.MVC3

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

  • 你好,谢谢你的回复.我试过用`[Url(UrlOptions.OptionalProtocol)]`.但是为了使`UrlOptions`可用,我必须添加`using DataAnnotationsExtensions`,然后`url`变得模棱两可.为了纠正这个问题,我使用了`[DataAnnotationsExtensions.Url(UrlOptions.OptionalProtocol)]`但它没有在前端验证. (2认同)