6

próbuję zweryfikować model zawierający inne obiekty z reguły poprawności wykorzystaniem atrybutów System.ComponentModel.DataAnnotations ufałem domyślnej implementacji MVC wystarczyłby:Wsparcie dla zagnieżdżonych i walidacji modelu klasy z ASP.NET MVC 2.0

var obj = js.Deserialize(json, objectInfo.ObjectType); 
if(!TryValidateModel(obj)) 
{ 
    // Handle failed model validation. 
} 

Obiekt składa się z typów pierwotnych, ale zawiera także inne klasy, które również korzystają z funkcji DataAnnotication. Tak:

public class Entry 
{ 
    [Required] 
    public Person Subscriber { get; set; } 

    [Required] 
    public String Company { get; set; } 
} 

public class Person 
{ 
    public String FirstName { get; set;} 

    [Required] 
    public String Surname { get; set; } 
} 

Problemem jest to, że walidacja ASP.NET MVC tylko idzie w dół 1 poziom i tylko ocenia właściwości najwyższym poziomie klasy, jak można przeczytać na digitallycreated.net/Blog/54/deep -inside-asp.net-mvc-2-model-metadane-i-sprawdzanie poprawności.

Czy ktoś zna eleganckie rozwiązanie tego problemu? Próbowałem xVal, ale wydaje się, że używają wzoru nierekursywnego (http://blog.stevensanderson.com/2009/01/10/xval-a-validation-framework-for-aspnet-mvc/).

Ktoś musiał być bliski tego problemu? Zagnieżdżanie obiektów w modelu nie wydaje się dziwne, jeśli projektujesz usługę WWW.

+1

ModelState.IsValid z jakiegoś powodu jest walidacji również zagnieżdżone obiekty, w przeciwieństwie TryValidateModel. Mylące. – JustAMartin

Odpowiedz

1

Proponuję przejrzeć Fluent Validation z codeplex. Reguły sprawdzania poprawności są zawarte w oddzielnej klasie (podobnie do pracy NHibernate i Fluent NHibernate). Jeden używa lambda do określenia właściwości do sprawdzenia poprawności, wspierając właściwości podrzędne.

`

public class MaintainCompanyViewModelValidator : AbstractValidator<MaintainCompanyViewModel> 
    { 
     public MaintainCompanyViewModelValidator() 
     { 
      RuleFor(model => model.Company.ShortName) 
       .NotEmpty(); 
     } 

`

Powiązane problemy