5

우리는 모델의 속성을 반복하여 속성을 자동으로 바인딩하고 C# 4.0에 새로운 데이터 주석을 포함하도록 기능을 확장하려는 일부 논리 내에서 필요합니다.ValidationAttributes를 수동으로 호출하는 방법은 무엇입니까? (DataAnnotations 및 ModelState)

현재 모든 ValidationAttribute 인스턴스에서로드되는 각 속성을 반복하고 Validate/IsValid 함수를 사용하여 유효성을 검사하려고 시도하지만이 작업이 저를 위해 작동하지 않는 것 같습니다. 나는이 같은 모델을 가지고 예를 들어

: 나는 코드를 디버깅 한

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); 
    } 
} 

하고 모델 3 개 특성을 가지고 :

public class HobbyModel 
{ 
    [Required(AllowEmptyStrings = false, ErrorMessage = "Do not allow empty strings")] 
    [DisplayName("Hobby")] 
    [DataType(DataType.Text)] 
    public string Hobby 
    { 
     get; 
     set; 
    } 
} 

그리고 속성을 확인하는 코드는 이 중 2 개는 ValidationAttribute에서 파생되지만 코드가 Validate 함수 (빈 값 또는 null 값 포함)를 통과 할 때 예상대로 예외가 throw됩니다.

저는 바보 같은 일을 할 것으로 기대하고 있습니다. 따라서이 기능을 사용하고 도움을 줄 수 있는지 궁금합니다. 사전에

감사합니다, 제이미

답변

3

속성 값 대신 소스 개체를 Validate 메서드로 전달하기 때문입니다. 예상대로 다음 (인덱스 속성하지만 분명하지 않음) 일 가능성이 높습니다 :

attrib.Validate(propertyInfo.GetValue(obj, null), propertyInfo.Name); 

당신은 분명하지만, Steven suggested로 쉽게 시간 using the Validator class있을 것입니다.

4

당신은 객체의 유효성을 검사 System.ComponentModel.DataAnnotations.Validator 클래스를 사용합니까.

+0

DataAnnotations 4.0 with ASP.Net MVC 3.0을 사용하는 예가 있습니까? 현재 3.5 (MVC 1.0에서 3으로 코드를 업그레이드 할 수도 있고 작동하지 않을 수도 있음) – Jamie

+0

을 사용하고 있습니다. MVC 2는 기본적으로 DataAnnotations와 함께 작동하므로 MVC 3을 사용하면 유효성 검사기를 수동으로 호출하지 않아도됩니다. – Steven

+0

기본적으로 프로세스를 별도의 메커니즘으로 오프로드하려고하므로 자동 바인딩을 사용하고 유효성 검사를 수동으로 실행할 수 있기를 원합니다. – Jamie

관련 문제