2011-03-02 74 views
1

我正在使用下面的類和默認的腳手架視圖,但我無法驗證客戶端的電子郵件。我也嘗試了另一個電子郵件的正則表達式,但是這也不起作用。我在這裏錯過了什麼?無法驗證客戶端的電子郵件

public class Person 
{ 
    [Email(ErrorMessage="...........")] 
    public string Name { get; set; } 
} 
public class EmailAttribute : RegularExpressionAttribute 
{ 
    public EmailAttribute() 
     : base(@"^[A-Za-z0-9._%+-][email protected][A-Za-z0-9.-]+\.[A-Za-z]{2,4}$") 
    { 
    } 
} 
+0

該正則表達式拒絕許多有效的電子郵件地址。 – CodesInChaos 2011-03-02 21:41:05

回答

4

您可能會感興趣following blog post。抽出來:

public class EmailAttribute : RegularExpressionAttribute, IClientValidatable 
{ 
    public EmailAttribute() 
     : base(@"^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}" + 
       @"\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\" + 
       @".)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$") 
    { 
    } 

    public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context) 
    { 
     var errorMessage = FormatErrorMessage(metadata.GetDisplayName()); 
     yield return new EmailValidationRule(errorMessage); 
    } 
} 

public class EmailValidationRule : ModelClientValidationRule 
{ 
    public EmailValidationRule(string errorMessage) 
    { 
     ErrorMessage = errorMessage; 
     ValidationType = "email"; 
    } 
} 

和使用:

public class Person 
{ 
    [Required(ErrorMessage = "{0} is required.")] 
    [Email(ErrorMessage = "{0} appears to be invalid.")] 
    public string Name { get; set; } 
} 

而這幾乎是所有。因爲這個自定義屬性實現了IClientValidatable,所以客戶端驗證也會起作用。

當然,如果在這個例子中使用的正則表達式不適合你,毫不猶豫地改進它。

+0

該正則表達式拒絕許多有效的電子郵件地址。 – CodesInChaos 2011-03-02 21:43:21

+0

@CodeInChaos,是的,當然,這個正則表達式可以改進。 – 2011-03-02 21:44:49

+0

@codeInChaos,將不勝感激知道正確的正則表達式。 – Freshblood 2011-03-02 21:49:43