web-dev-qa-db-ja.com

mvc [DataType(DataType.EmailAddress)検証なし

私はメールフィールドでこのコードを使用しています:

_    [Required]
    [DataType(DataType.EmailAddress)]
    [Display(Name = "Email address")]
    public string Email { get; set; }
_

[DataType(DataType.EmailAddress)]は機能しません(検証はクライアント側にないサーバーでは発生しません)。

自分でカスタム属性を実装する必要があるのか​​、MVC 3に含まれている属性を使用できるのかはわかりません。

必要な場合にカスタム属性を作成するためのソリューションを提案してください。

いくつかの追加の拡張機能についても読みます。例 http://nuget.org/packages/DataAnnotationsExtensions.MVC

提案していただけますか?

29
GibboK

現時点では、DataAnnotationsExtensionsを使用して問題を解決しました

動作します。NuGetでライブラリを追加します

using DataAnnotationsExtensions;


[Required]
    [DataType(DataType.EmailAddress)]
    [Email]
    public string Email { get; set; }
11
GibboK

[EmailAddress]を使用するだけで、通常のDataAnnotationsライブラリを使用できます。

using System.ComponentModel.DataAnnotations;
    [Required]
    [EmailAddress]
    public String Email { get; set; }

また、参照用に、この検証の正規表現バージョンを示します。

    [RegularExpression(@"^[A-Za-z0-9](([_\.\-]?[a-zA-Z0-9]+)*)@([A-Za-z0-9]+)(([\.\-‌​]?[a-zA-Z0-9]+)*)\.([A-Za-z]{2,})$", ErrorMessage = "Email is not valid")]
    public String Email {get; set;}

幸運を祈ります!

44
SarahK

この問題はビュー自体の影響を受ける可能性がありますが、すべての回答がデータモデルに焦点を当てているようです。

MVC .NET 4.5の次は正常に動作しています。

データ・モデル:

[Required]
[DataType(DataType.EmailAddress)]
[DisplayName("Email")]
public string Email { get; set; }

かみそりビュー:

@Html.LabelFor(model => model.Email)
@Html.EditorFor(model => model.Email)

注: [EmailAddress]属性を追加する必要はありません。ビューで@ Html.EditorFor()とともに[DataType(DataType.EmailAddress)]を使用する場合、問題ありません。

Rich.okellyで強調表示されているように、最後に入力を<input type="email" />

6
Felix

これは誰かに役立つかもしれません。私の作品をフォローする

[Required(ErrorMessage = "*")]
[DataType(DataType.EmailAddress)]
[EmailAddress]
public string Email { get; set; }

しかし、次のようには機能しません

[Required(ErrorMessage = "*")]
[DataType(DataType.EmailAddress)]
public string Email { get; set; }

私は使っている MVC 5.NET 4.5

4
msib

Felix言及 のように、問題はViewレベルにあり、EditorFor()の代わりにViewTextBoxFor()を使用する必要があります、EditorFor()は以下をレンダリングします:

<input type="email" />

これにより検証がトリガーされ、TextBoxFor()がレンダリングされます:

<input type="text" />

したがって、入力したメールアドレスを検証するには、(EditorFor()と組み合わせて)以下のみを使用する必要があります。

[DataType(DataType.EmailAddress)]
public string Email { get; set; }

この方法では、入力した電子メールの値は常に検証されますが、電子メールの値を入力しないと何も起こりません([Required]属性を指定しない限り)、フォームは空の電子メールで送信されます住所。

2
Stacked