2017-07-17 6 views
0

Ich habe die unten benutzerdefinierte Daten Anmerkung Validierung in meinem Code für meine Textbereich hinzugefügt (erlauben nur gültige E-Mail-IDs)Benutzerdefinierte Daten Annotation nicht funktioniert

public class ValidateEmails : ValidationAttribute 
{ 
    protected override ValidationResult IsValid(object value, ValidationContext validationContext) 
    { 
     if (value != null) 
     { 
      string[] commaLst = value.ToString().Split(','); 
      foreach (var item in commaLst) 
      { 
       try 
       { 
        System.Net.Mail.MailAddress email = new System.Net.Mail.MailAddress(item.ToString().Trim()); 

       } 
       catch (Exception) 
       { 
        return new ValidationResult(ErrorMessage = "Please enter valid email IDs separated by commas;"); 
       } 
      } 
     } 
     return ValidationResult.Success; 
    } 

} 

Modell:

public class BuildModel 
{ 
    public Int64 ConfigID { get; set; } 

    [Required(ErrorMessage = "Please select a stream!")] 
    public string StreamName { get; set; } 

    [Required(ErrorMessage = "Please select a build location!")] 
    public string BuildLocation { get; set; } 

    public string Type { get; set; } 

    public bool IsCoverity { get; set; } 

    [ValidateEmails(ErrorMessage = "NOT VALID !!!")] 
    public string EmailIDsForCoverity { get; set; } 
    } 

Wenn ich meine App ausführen und eine ungültige Zeichenfolge in den Textbereich eingeben, trifft der Haltepunkt innerhalb der Überprüfung. Aber die Submission-Aktion läuft weiter.

Eigentlich habe ich eine Bootstrap-Modalform, innerhalb der ich die Validierung mache. Mit einem Klick auf die Schaltfläche "Absenden" funktionieren die integrierten benutzerdefinierten Validierungen wie "Erforderlich". Meine benutzerdefinierte Annotationsvalidierung funktioniert jedoch nicht. Was falsch mache ich hier?

+1

Sie 'Model.IsValid' in Ihrer Aktion sind die Überprüfung? – DavidG

+0

können Sie 'RegularExpression'-Validatoren für diese und Regex für diese Komma-getrennte Validierung verwenden' (([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}) (\]?) (\ s *; \ s * | \ s * $)) * 'bitte überprüfen Sie [ diese Antwort] (https://stackoverflow.com/a/9809636/2534646) für weitere Informationen – Curiousdev

+0

Ihr Attribut muss 'IClientValidatable' implementieren und Sie müssen die Skripte schreiben, um die Regeln zu dem' $ .validator' hinzuzufügen, wenn Sie möchte clientseitige Validierung. –

Antwort

0

Sie sollten Model.IsValid Wert im Controller überprüfen. Model.IsValid Geben Sie false zurück, wenn eine Validierung fehlschlägt (einschließlich benutzerdefinierter Validierungen). So sieht der Code Ihres Controllers wie folgt aus.

[HttpPost] 
    public virtual ActionResult Index(BuildModel viewModel) 
    { 

    if (ModelState.IsValid) 
    { 
     // Your Custom code... 
    } 

    return View(viewModel); 
    } 
+0

, aber ich muss es nur auf Client-Seite validiert werden. – Ponni

+1

Dann sollten Sie die Jquery-Validierung verwenden. Benutzerdefinierte Validierung funktioniert serverseitig. – CommonPlane

0

Der Code sollte etwa so aussehen:

[Display(Name = "Email address")] 
[Required(ErrorMessage = "The email address is required")] 
[EmailAddress(ErrorMessage = "Invalid Email Address")] 
public string Email { get; set; } 

Quelle: Email address validation using ASP.NET MVC data type attributes

+0

Meine Eingabe würde durch Komma getrennte E-Mail-IDs sein, keine einzelne E-Mail-ID. – Ponni

Verwandte Themen