2013-05-21 22 views
2

我使用MVC 3DataAnnotation文本區域多封電子郵件

我在其中用戶可以輸入多個電子郵件地址的文本區域。電子郵件可以用逗號和空格分隔。用戶也可以在框中輸入。

  1. 是否有一個屬性可以處理這種情況?

  2. 我使用正則表達式來檢查字符,它是失敗的「[email protected][email protected]

這裏是我的正則表達式: [正則表達式( @「([a-zA-Z0-9。@ -_ \ n \ t \ r] +)」,ErrorMessage = ValidationMessageConstants.EmailAdressInvalid)]

我在這裏丟失了什麼?這個正則表達式是關閉以下帖子: DataAnnotations validation (Regular Expression) in asp.net mvc 4 - razor view

+0

什麼問題? – Overmachine

回答

1

你不說明問題是什麼,所以我將不得不從你的答案中假設數據註釋並不像你所期望的那樣工作。

考慮到這個假設,它很容易爲什麼不起作用:數據註釋在整個字段上運行,在您的案例中的文本區域。如果您只有一封電子郵件,它將按預期工作。由於您在該字段中有多個電子郵件,以逗號或空格分隔,因此該字段完整無法反映電子郵件的數據註釋是否規定並失敗。

要回答你的問題編號:

  1. 沒有,沒有了你使用不佔多封郵件,但一個盒子

  2. 的正則表達式。你的情況的解決方案將是要麼使用RegEx for multiple emails分離,只要你願意或

  3. custom validation attribute這樣做是爲了你

按照上面的鏈接

  • 數據註解會看到「如何」的非常好的例子,並希望讓你朝着正確的方向前進。 希望這有助於,請讓我知道,如果沒有。

+0

我從#1開始,但現在將使用您指定給我的#2的資源。謝謝 –

2

開箱即用,.NET 4.5在System.ComponentModel.DataAnnotations程序集中找到System.ComponentModel.DataAnnotations.EmailAddressAttribute,但僅限於驗證一個電子郵件地址。因此,如果您有一個接受分隔郵件地址的模型,並且使用此屬性裝飾屬性,則它將失敗,因爲它會將整個字符串視爲一封電子郵件。

我所做的就是創建一個驗證分隔的電子郵件地址的擴展屬性EMAILADDRESS:

[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter, AllowMultiple = false)] 
public class EmailAddressExAttribute : DataTypeAttribute 
{ 
    #region privates 
    private readonly EmailAddressAttribute _emailAddressAttribute = new EmailAddressAttribute(); 
    #endregion 

    #region ctor 
    public EmailAddressExAttribute() : base(DataType.EmailAddress){ } 
    #endregion 

    #region Overrides 
    /// <summary> 
    /// Checks if the value is valid 
    /// </summary> 
    /// <param name="value"></param> 
    /// <returns></returns> 
    public override bool IsValid(object value) 
    { 
     var emailAddr = Convert.ToString(value); 
     if (string.IsNullOrWhiteSpace(emailAddr)) return false; 

     //lets test for mulitple email addresses 
     var emails = emailAddr.Split(new[] {';', ' ', ','}, StringSplitOptions.RemoveEmptyEntries); 
     return emails.All(t => _emailAddressAttribute.IsValid(t)); 
    } 
    #endregion 

} 

現在,您可以裝飾這個新的擴展屬性的任何字符串屬性驗證分隔的電子郵件地址。您可以更新分隔符以包含您想要使用的任何特殊字符。

希望這會有所幫助!

+0

不錯。在我的例子中,我選擇了正則表達式路線。 –

+0

好主意,適合我的場景。 – Rowan

相關問題