2012-09-14 3 views
1

ValidationAttribute에서 클라이언트 유효성 검사 규칙을 가져 오려고합니다. 해당 유효성 검사기에는 DataAnnotationsModelValidatorProvider.RegisterAdapter를 사용하여 어댑터로 연결된 DataAnnotationsModelValidator를 통해 클라이언트 유효성 검사 규칙이 연결되어 있습니다.MVC 유효성 검사 속성 어댑터 가져 오기

그러나 런타임에 어댑터를 다시 가져 오는 방법을 내가 알지 못합니다. 도움이 될 것입니다.

덕분에, 앤드류

+0

"런타임에 어댑터 가져 오기"란 무엇을 의미합니까? – Dima

+0

아마도 최고의 단어 선택이 아닙니다. 난 그냥 DataAnnotationsModelValidatorProvider.RegisterAdapter에 의해 첨부 된 것을 검색했다. – Boomtown

+0

내부 사전에 저장되어 있기 때문에 쉽게 얻을 수 있는지 확신 할 수 없습니다. 더 나은 옵션은 공급자에게 직접 추가 된 어댑터를 추적하는 것입니다. – VJAI

답변

0

당신은 속성과 속성의 MemberInfo 개체를 가져 반사를 사용할 필요가있다. 당신을 ViewData 편리이 경우,

// given memberInfo, controllerContext, and modelMetadata 
// (see below on how to get metadata) 
foreach (var attribute in memberInfo.GetCustomAttributes(typeof(ValidationAttribute), true) 
{ 
    var clientValidationAttribute = attribute as IClientValidatable; 
    if (clientValidationAttribute == null) 
    { 
     continue; 
    } 

    var clientValidationRules = clientValidationAttribute.GetClientValidationRules(modelMetadata, controllerContext); 

    // do something with the rules 
} 

모델 메타 데이터를 얻으려면, 당신은

ModelMetadata.FromLambdaExpression(expression, viewData) 

를 호출 할 수 있습니다. 명시 적으로 ModelMetadataProvider를 호출하여 가져올 수도 있습니다. 자세한 내용이 필요한 경우 알려주십시오.

+0

그러면 IClientValidatable의 일부로 속성에 직접 추가되는 규칙이 생깁니다. DataAnnotationsModelValidatorProvider.RegisterAdapter를 사용하여 DataAnnotationsModelValidator를 등록하여 추가 된 규칙에 대해 묻습니다. 그래도 제안을 주셔서 감사합니다. – Boomtown

0

here - 표시 템플릿이 문자열 길이 유효성 검사기 (있는 경우)를 가져 와서 그에 따라 html 속성을 추가하는 예제를 살펴보십시오. 관련 코드는 다음과 같습니다.