나는 일반적으로 큰 내 ASP.NET MVC 응용 프로그램에서 xVal을 사용하고 있습니다. Steve Sanderson's blog post 다음에 DataAnnotationsValidationRunner를 만들어 속성 객체의 서버 측 유효성 검사를 수행했습니다. 이것은 간단한 수업에 효과적입니다. 예 : 사람 : 나는이 사람에게 주소 속성을 추가하고 DataAnnotation 속성과 주소 클래스를 표시하는 경우xVal 복합 유형의 하위 속성을 어떻게 확인합니까?
public static class DataAnnotationsValidationRunner
{
public static IEnumerable<ErrorInfo> GetErrors(object o)
{
return from prop in TypeDescriptor.GetProperties(o).Cast<PropertyDescriptor>()
from attribute in prop.Attributes.OfType<ValidationAttribute>()
where !attribute.IsValid(prop.GetValue(o))
select new ErrorInfo(prop.Name, attribute.FormatErrorMessage(string.Empty), o);
}
}
public class Person
{
[Required(ErrorMessage="Please enter your first name")]
public string FirstName { get; set; }
[Required(ErrorMessage = "Please enter your last name")]
public string LastName { get; set; }
}
그러나, 그들은 검증되지 않습니다. 예 :
public class Person
{
[Required(ErrorMessage="Please enter your first name")]
public string FirstName { get; set; }
[Required(ErrorMessage = "Please enter your last name")]
public string LastName { get; set; }
public Address Address { get; set; }
}
public class Address
{
[Required(ErrorMessage="Please enter a street address")]
public string Street { get; set; }
public string StreetLine2 { get; set; }
[Required(ErrorMessage = "Please enter your city")]
public string City { get; set; }
[Required(ErrorMessage = "Please enter your state")]
public string State { get; set; }
[Required(ErrorMessage = "Please enter your zip code")]
public string Zip { get; set; }
public string Country { get; set; }
}
하나의 문제는 DataAnnotationValidationRunner가 복잡한 자식 속성을 걸어하지 않습니다. 또한 이러한 오류가 오류 컬렉션에 추가되면 모델 상태에 추가 될 때 여전히 올바르게 접두사를 가져와야합니다. 예를 들어. 사람이 오류는 다음과 같이 추가됩니다
catch (RulesException ex)
{
ex.AddModelStateErrors(ModelState, "person");
}
내가 주소 규칙의 예외는 "있는 Person.Address"로 시작 될 필요가있다 생각합니다. xVal을 사용하여 자식 개체 유효성 검사를 처리하는 지원되는 방법이 있습니까? 아니면 단순화 된 데이터 전송 개체를 만드는 것이 유일한 해결책입니까? 모든
두 번째 대답은 작동하지만 부모 개체에 여러 속성이 있지만 모두 동일한 자식 유형을 연결하지만 속성이 다른 경우 세분화됩니다. 즉. 사용자 BillingAddress ShippingAddress 이 문제를 해결하기 위해 xval.jquery 유효성 검사 유틸리티를 조정할 수있는 것처럼 보입니다. –