26

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

基本的にここで何が起こっているかです。

次のようにビューモデルにプロパティがあります

[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 に答える