2012-07-12 129 views
26

我使用的電子郵件字段驗證碼:MVC [數據類型(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.MVC3

你會建議給我嗎?

+0

我有一個類似的問題,只是使用'RegularExpression(...)'來做電子郵件地址驗證。 – bluevector 2012-07-12 14:05:11

+3

請擴大'不工作'。 DOM中的輸入元素(如果使用'HTML.InputFor(m => m.Email)'應該有'type =「email」'屬性集。 – 2012-07-12 14:05:43

+0

向我們展示您的視圖 – 2012-07-12 14:06:41

回答

9

目前,我已經解決了使用 http://dataannotationsextensions.org

它只是工作,你加入他們的庫的NuGet

using DataAnnotationsExtensions; 


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

如果我們在類庫項目中使用數據模型不起作用 – 2013-02-04 06:25:21

+1

從今天開始:'[EmailAddress]' – Lobato 2017-08-10 12:45:36

41

您可以通過只使用[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;} 

祝你好運!

+1

對不起,但你的正則表達式不起作用 – escist 2012-07-19 13:24:41

+2

嘿escist,試試這個代替:[RegularExpression(@「^ [A-Za-z0-9](([_ \。\ - ]?[a-zA-Z0-9] +)*)@([A-Za-z0 -9] +)(([\。\ - ]?[a-zA-Z0-9] +)*)\。([A-Za-z] {2,})$「,ErrorMessage =」Email is無效「)]' – SarahK 2012-07-19 14:05:28

+4

停止使用正則表達式驗證電子郵件地址已經http://davidcel.is/blog/2012/09/06/stop-validating-email-addresses-with-regex/ – Luc 2014-01-07 07:29:07

4

可能這會對某人有幫助。下面我

[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

+0

看起來[DataType(DataType.EmailAddress)]屬性只有在如果你只是想驗證條目是否存在,似乎[EmailAddress]屬性更適合 – Neilski 2015-01-19 11:43:44

5

它看起來像所有的答案集中在數據模型,而這個問題可能會受到影響由視圖本身。

對MVC .NET 4.5下工作好嗎:

數據模型:

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

Razor視圖:

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

注:不需要添加[EmailAddress的]屬性。如果你在你的View中使用[DataType(DataType.EmailAddress)]和@ Html.EditorFor(),你應該沒問題。

正如使用rich.okelly突出顯示的那樣,最後您希望輸入呈現爲<input type="email" />

+1

嘗試輸入值a @ a表單被提交併且在客戶端和服務器,如果你在模型中使用EmailAddress,它會通過客戶端並且服務器端失敗。 – Bob 2015-05-08 18:57:10

1

由於Felix mentioned,問題是在View水平,你需要在你View而不是TextBoxFor()使用EditorFor(),該EditorFor()將呈現:

<input type="email" /> 

將觸發驗證,而TextBoxFor()將呈現:

<input type="text" /> 

因此,爲了驗證您輸入的電子郵件地址,您需要(與結合使用)只能使用:

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

這樣,你的電子郵件輸入值將始終驗證,但如果你不電子郵件輸入值,什麼都不會發生(除非你指定的[Required]屬性),該表格將提交一個空的電子郵件地址。