2017-04-22 1 views
1

私はmvc development.iの初心者です。validationResultを使用した検証付きの電子メールテキストボックスがあります。複数のメールを1つずつ追加する必要があります。だから我々は、電子メールが正しいformat.thisであるかどうかを確認する必要があり、検証のためのコードです:カンマを使用して1行でリスト文字列を結合する方法は?

public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) 
{   
    var results = new List<ValidationResult>(); 
    var Emailvaild = new Regex(@"^([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})(\]?)$"); 
    foreach (VEmail em in Emails) 
    { 
     if (!Emailvaild.IsMatch(em.Email)) 
     { 
      results.Add(new ValidationResult(em.Email + " is an invaild", new List<string> { string.Empty })); 
     } 
    } 

    return results; 
} 

それはworking.each時間メールで検証され、それが正しくない場合、それは検証メッセージを示しています。しかし、そのたびにメッセージが表示されます。たとえば、私は20の電子メールを持っていて、各電子メールは正しい形式ではありません。それで、20メッセージ1を別のメッセージの下に表示します。カンマを使って電子メールに参加したい。

答えて

1

現在のコードでは、ループの反復処理中に不正なメールごとに新しいValidationResultオブジェクトが追加されています。 foreachループからそれを移動し、ループ内の別のコレクションに悪い電子メールを追加し、string.joinメソッドを使用して、そのコレクション内の項目のカンマ区切りリスト(悪い電子メール)を作成し、それを単一のValidationResultオブジェクト。

var results = new List<ValidationResult>(); 
var wrongEmails = new List<string>(); 
foreach (VEmail em in Emails) 
{ 
    if (!Emailvaild.IsMatch(em.Email)) 
    { 
     wrongEmails.Add(em.Email); 
    } 
} 
if(wrongEmails.Any()) 
{ 
    results.Add(new ValidationResult("Below emails are not good!" 
               + string.Join(",",wrongEmails), 
               new List<string> { string.Empty })); 
} 
return results; 
+0

ありがとうございます、あなたのソリューションは私のために働いています –

関連する問題