18

私は2日間の回答を見つけようとした後、ここにこの質問を書いています。mvc4 url​​ validation

基本的にここでは何が起こっているのですか?

ビューで

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

を次のように私はのviewmodelでプロパティを持って、私はこの

@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

注:これはまた、4

+2

こんにちは、お返事ありがとうございます。私は '[Url(UrlOptions.OptionalProtocol)]を使用しようとしました。 'UrlOptions'を利用できるようにするには、' DataAnnotationsExtensions'を使う必要があります.'Url'はあいまいになります。これを修正するために、私は '[DataAnnotationsExtensions.Url(UrlOptions.OptionalProtocol)]'を使用しましたが、フロントエンドでは検証しません。 – Amila

+1

さて、私がDataAnnotationsExtensionsで間違っていることを見つけるまで、私は答えを組み合わせるつもりです。私は[link](http://dataannotationsextensions.org/Url/Create)からオプションプロトコルの正規表現を取得し、検証のために正規表現データ注釈を使用しました。今それは正常に動作します。しかし、DataAnnotationExtensionsで提供されるその他の注釈拡張機能を使用したいと思います。何が起こっているのか把握する必要があります – Amila

+0

@Amila私は同じ問題を抱えていました。私はこの定期的なエクササイズを代わりに使用しました。 \\(\\。)?a-zA-Z0-9 @:%._ \\ +(%\\)のようにすべてを包括するわけではありません。 〜〜=〜{2,256} \\。[az] {2,6} \\ b([ - a-zA-Z0-9 @:%_ \\ +。〜#?&// =] *)$ ")]' – Lsakurifaisu

0

質問が完全にわかっているかわかりません。正しい形式のURLを検証しようとしていますか?次のように正規表現DataAnnotationを実装することができるようにした場合:

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

ASP.NET MVCで正常に動作しますこれは機能しません。私が試したURL正規表現は、MVCデータアノテーションとして追加しても動作しません。 –

+0

これは私にとってはうまくいくようです。[RegularExpression( "^ [http(s)?]:\\/\\ /(www \\)?a-zA-Z0-9 @:%。 〜〜=〜{2,256} \\。[az] {2,6} \\ b([ - a-zA-Z0-9 @:%_ \\ +。〜#?&// =] *)$ ")] – Lsakurifaisu