2

Ich verwende IValidatableObject Validierung für Entitäten mit z. folgender Code:Warum und wie wird die ASP MVC-Modellüberprüfung für untergeordnete Entitäten repariert, wird jedoch nicht für die übergeordnete Entität aufgerufen?

public class OuterObj : IValidatableObject 
{  
    public int ID { get; set; } 

    public string Name { get; set; } 

    public IEnumberable<InnerObj> InnerObjList { get; set; } 

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) 
    { 
     if (this.ID <= 0) 
     { 
      yield return new ValidationResult("", new[] { nameof(this.ID) }); 
     } 
    } 
} 

public class InnerObj : IValidatableObject 
{ 
    public int ID { get; set; } 

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) 
    { 
     if (this.ID <= 0) 
     { 
      yield return new ValidationResult("", new[] { nameof(this.ID) }); 
     } 
    } 
} 

In diesem Fall, wenn ich die outerObj bin Validierung, wenn es innerObj zu präsentieren ist es bestätigt nur die innerobj und nicht die outerobj. Es erreicht nicht die outerobj validate-Methode im Falle der Anwesenheit von innerobj.

Ich möchte beide validieren, wenn innenrobj vorhanden. Bitte hilf mir, wie es gemacht wird. Warum validiert das outterobj nicht?

Antwort

0

MVC 5.2.3

Wenn die übergeordnete Klasse hat Eigenschaften mit validation attributes, und jede dieser Eigenschaften hat als ungültig, dann ist die IValidatableObject.Validate Implementierung nicht auf der übergeordneten Klasse bewertet worden aufgerufen werden.

Dies scheint eine Art Abkürzung zu sein, die MVC für die Modellvalidierung durchführt.

Ihr Beispiel zeigt Validierungsattribut (e) in der Elternklasse nicht an - ich gehe davon aus, dass sie weggelassen wurden.

Die Problemumgehung ist Entfernen von validation attributes auf Eigenschaften in der übergeordneten Klasse und Implementieren der Überprüfung nur in der übergeordneten Klasse über die Schnittstelle IValidatableObject.