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.
ModelState.IsValid z jakiegoś powodu jest walidacji również zagnieżdżone obiekty, w przeciwieństwie TryValidateModel. Mylące. – JustAMartin