web-dev-qa-db-ja.com

mvc4 url​​検証

2日間答えを見つけようとした後、ここにこの質問を書いています。

基本的にはここで起こっていることです。

私はviewmodelに次のようなプロパティを持っています

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

ここでの問題は、このフィールドの入力テキストがクライアント側で検証される方法にあります。フィールドには常にプロトコルプレフィックスが必要です。そうでない場合は無効になります。

この問題を解決する最良の方法は何ですか?

どうもありがとう

25
Amila

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でも正常に機能します

36
Erik Schierboom

私がその質問を完全に理解しているかどうかわかりません。正しい形式の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")]
0
Myles J