2012-04-10 14 views
0

In MVC 3 Rasierer erscheinen lassen scheint es 2 Möglichkeiten zu sein:Wie nur bestimmte Fehlermeldungen in der Validierung Zusammenfassung (MVC3)

Zeigen alle Fehler der verschiedenen Eigenschaften in der Validierung Zusammenfassung

@Html.ValidationSummary(false) 

oder die Fehler zeigen neben den Eigenschaften selbst

@Html.ValidationSummary(true) 

Aber ich möchte nur einige der Eigenschaften ihrer erro anzuzeigen r in der Validierung Zusammenfassung (Fehlermeldungen zurück von meinem Validate überschreibt, zB)

public IEnumerable<ValidationResult> Validate(ValidationContext context) 
    { 
     if (string.IsNullOrWhiteSpace(HomePhoneNumber) && string.IsNullOrWhiteSpace(WorkPhoneNumber) && string.IsNullOrWhiteSpace(MobileNumber) && string.IsNullOrWhiteSpace(FaxNumber)) 
     { 
      yield return new ValidationResult("Please fill in at least one of the phone fields with a phone number"); 
     } 
    } 

und andere, einfache Validierung ihre Fehlermeldung neben ihnen angezeigt haben, wie durch das Modell definiert, zB

[Required(ErrorMessage = "Please fill in your full name")] 

Ist das möglich?

Antwort

0

Es ist möglich. ValidationSummary() zeigt ModelErrors für string.empty als Schlüssel an. Hier ist Beispielcode:

IList<ValidationResult> validationResults = Validate(); 

if (validationResults != null) { 
    foreach (var validationResult in validationResults) { 
     ModelState.AddModelError(String.Empty, validationResult.ErrorMessage); 
    } 
} 

In Ansicht:

@Html.ValidationSummary(true) 

Edit:

Oben ist ein Beispiel Beispiel dafür, wie die ValidationSummery Helfer behandelt Nicht-Eigenschaft (Objekt) Level-Nachrichten .

Ihr Code sollte jedoch wie erwartet funktionieren. Beachten Sie, dass die Validierungsschnittstellenmethode IEnumerable<ValidationResult> IValidatableObject.Validate(ValidationContext validationContext) ausgelöst wird, wenn die Eigenschaften des Objekts keine Fehler enthalten. Hier ist der Standardsequenz von Validierungsprüfmechanismus:

  • Objektattribute
  • Klassen-Attribute
  • Validate Schnittstelle

Wenn eine der Schritt fehlgeschlagen ist, wird es sofort ohne weitere Prüfung zurück. Wenn die unauffällige Clientvalidierung aktiviert ist, sollten die attributbasierten Validierungen auf Clientseite ausgelöst werden. Dann würde die Validierungsschnittstelle während der Modellbindung ausgelöst werden.

+0

2 Fragen: Wo sollte dieser Code gehen - in der Steuerung? – stuartdotnet

+0

und zweitens: sollte Validate nicht mit dem ValidationContext-Parameter aufgerufen werden? vorausgesetzt, dass die Schnittstelle so implementiert werden muss. – stuartdotnet

+0

Ja, normalerweise in der Steuerung. – Kibria

Verwandte Themen