2012-09-07 75 views
4

我試圖驗證在MVC模式這個屬性,它可以包含零個或多個電子郵件地址由逗號分隔:驗證對一個字符串包含逗號分隔的電子郵件

public class DashboardVM 
{ 
    public string CurrentAbuseEmails { get; set; } 
    ... 
} 

的問題是我怎麼做到這一點使用電子郵件地址的內置流暢驗證規則? 現在我有一個解決方案,使用必須和正則表達式的作品,但我沒有找到它......足夠優雅。

public DashboardVMValidator() 
    { 
     RuleFor(x => x.CurrentAbuseEmails).Must(BeValidDelimitedEmailList).WithMessage("One or more email addresses are not valid."); 
    } 

    private bool BeValidDelimitedEmailList(string delimitedEmails) 
    { 
     //... match very very long reg. expression 
    } 

到目前爲止最接近的解決方案,包括RuleFor(...)。EmailAddress的()是下面創建一個自定義的驗證程序,並調用驗證從字符串每封電子郵件,但沒有出於某種原因(AbuseEmailValidator無法在每個電子郵件中調用validator.Validate時得到我的謂詞x => x-)。

public class AbuseEmailValidator : AbstractValidator<string> 
{ 
    public AbuseEmailValidator() 
    { 
     RuleFor(x => x).EmailAddress().WithMessage("Email address is not valid"); 
    } 
} 

有沒有辦法以一些簡單的方式做到這一點?同樣的事情也該解決方案,但有一個字符串,而不是字符串列表,因爲我不能使用SetCollectionValidator(或可以嗎?):How do you validate against each string in a list using Fluent Validation?

回答

6

你可以嘗試這樣的事情:

public class InvoiceValidator : AbstractValidator<ContractInvoicingEditModel> 
{ 
    public InvoiceValidator() 
    { 
     RuleFor(m => m.EmailAddressTo) 
      .Must(CommonValidators.CheckValidEmails).WithMessage("Some of the emails provided are not valid"); 
    } 
} 

public static class CommonValidators 
{ 
    public static bool CheckValidEmails(string arg) 
    { 
     var list = arg.Split(';'); 
     var isValid = true; 
     var emailValidator = new EmailValidator(); 

     foreach (var t in list) 
     { 
      isValid = emailValidator.Validate(new EmailModel { Email = t.Trim() }).IsValid; 
      if (!isValid) 
       break; 
     } 

     return isValid; 
    } 
} 
public class EmailValidator : AbstractValidator<EmailModel> 
{ 
    public EmailValidator() 
    { 
     RuleFor(x => x.Email).EmailAddress(); 
    } 
} 

public class EmailModel 
{ 
    public string Email { get; set; } 
} 

它如果您使用中介poco,似乎工作正常。我的電子郵件由「;」分隔在這種情況下。希望能幫助到你。

+0

良好的答覆,exacly我需要什麼,thx :) – lsp

相關問題