2017-01-16 3 views
1

Ich versuche den DataAnnotations.Validator außerhalb von MVC zu nutzen. Ich habe zwei Dienste, die ihre jeweiligen Modelle validieren. Beide Modelle erben von einer Basisklasse, die ich schrieb, die eine ValidateModel() Methode hatte.TryValidateObject liefert keine Ergebnisse im Bereich

Ich habe einen Test für jeden Dienst, der überprüft, ob sich der Dienst korrekt verhält, wenn die Daten ungültig sind. Das eine Modell korrekt Fehler für PhoneNumber == null:

[Required] 
public string PhoneNumber { get; set; } 

das andere Modell hat Fehler jedoch nicht, wenn CompanyId ist 0. CompanyID wie folgt definiert ist:

public class CompanyAddressDomainModel : BaseValidatableDomainModel 
{ 
    // Other fields 
    [Required] 
    [Range(1, int.MaxValue, ErrorMessage = "Company is required")] 
    public int CompanyId { get; set; } 
    [Required] 
    public AddressInputDomainModel Address { get; set; } 
} 

Der Code ruft die Validierung wie folgt aus:

CompanyAddressDomainModel companyAddress = // set values 

companyAddress.ValidateModel(); 
if (!companyAddress.ModelState.IsValid) 
{ 
    return companyAddress; 
} 

Warum würde es eine Validierung erhalten, und nicht andere? Soweit ich das beurteilen kann, sind die beiden Dienste und Modelle gleich definiert. Wenn mehr Informationen benötigt werden, lass es mich wissen.

Wenn ich mit CompanyId == 0 und Address == null testen, sehe ich den Adressfehler, aber nicht den CompanyId Fehler.

Antwort

1

Sieht aus, als ob ich TryValidateObject sagen muss, um alle zu validieren.

public static bool TryValidateObject(
    object instance, 
    ValidationContext validationContext, 
    ICollection<ValidationResult> validationResults, 
    bool validateAllProperties 
) 

So:

Validator.TryValidateObject(this, validationContext, results, true); 
Verwandte Themen