W części naszej logiki potrzebujemy do iteracji właściwości modelu do właściwości automatycznego wiązania i chcemy rozszerzyć funkcjonalność o nowe dane w C# 4.0.Jak ręcznie wywołać atrybuty sprawdzania poprawności? (DataAnnotations i ModelState)
W tej chwili zasadniczo iteruję po każdym ładowaniu właściwości we wszystkich instancjach ValidationAttribute i próbuję sprawdzić poprawność za pomocą funkcji Validate/IsValid, ale to nie działa dla mnie.
Jako przykład mam modelu, takie jak:
public class HobbyModel
{
[Required(AllowEmptyStrings = false, ErrorMessage = "Do not allow empty strings")]
[DisplayName("Hobby")]
[DataType(DataType.Text)]
public string Hobby
{
get;
set;
}
}
a kod do sprawdzenia atrybuty to:
object[] attributes = propertyInfo.GetCustomAttributes(true);
TypeConverter typeConverter =
TypeDescriptor.GetConverter(typeof(ValidationAttribute));
bool isValid = false;
foreach (object attr in attributes)
{
ValidationAttribute attrib = attr as ValidationAttribute;
if (attrib != null)
{
attrib.Validate(obj, propertyInfo.Name);
}
}
Mam debugowania kodu, a model ma 3 cechy , 2 z których pochodzą z ValidationAttribute, ale kiedy kod przechodzi przez funkcję Validate (z pustą lub pustą wartością), generuje wyjątek zgodnie z oczekiwaniami.
Spodziewam się, że robię coś głupiego, więc zastanawiam się, czy ktoś użył tej funkcji i może pomóc.
Dzięki z góry, Jamie
Masz przykład użycia DataAnnotations 4.0 z ASP.Net MVC 3.0, obecnie używam 3.5 (który może lub nie działa, uaktualniam kod z MVC 1.0 na 3) – Jamie
Jeśli nie jestem mylnie, MVC 2 i nowsze działają domyślnie z DataAnnotations, więc podczas pracy z MVC 3 nie będziesz musiał wywoływać walidatora ręcznie. – Steven
Zasadniczo chcemy odciążyć proces w oddzielny mechanizm, więc chcemy mieć możliwość automatycznego sprawdzania i ręcznego sprawdzania poprawności. – Jamie