2013-11-20 3 views
1

MVC에서 System.Web.Mvc.IModelBinder를 구현하는 사용자 지정 모델 바인더를 사용하고 있습니다.사용자 지정 ModelBinder의 데이터 주석 추출

모델 바인더는 제네릭 형식 (클래스)을 사용하여 각 클래스 속성을 추출하고 각 속성에 대한 추가 세부 정보와 함께 목록에 저장합니다. 예를 들어 각 속성에 대해 로그인 된 사용자를 기반으로 각 속성에 대해 액세스 권한, 즉 읽기, 쓰기, 없음을 저장합니다. 그런 다음 내보기에서이 추가 데이터를 사용하여 특정 속성을 표시할지 여부를 결정합니다.

각 속성에 대한 유효성 검사 데이터 주석 속성을 검색하고 이러한 세부 정보도 저장할 수 있기를 원합니다. 나는 html 애트리뷰트들로 그것들을 저장하고 싶다.이 애트리뷰트를 나중에 아래 예제에서와 같이 사용하는 컨트롤에 삽입 할 수있다.

<input data-val="true" data-val-length="Address1&#32;must&#32;be&#32;less&#32;than&#32;8!!" data-val-length-max="8" data-val-required="Address&#32;Line&#32;1&#32;is&#32;required." id="Entity_Address_AddressLine1" name="Entity.Address.AddressLine1" type="text" value="aaaa1111" /> 

리플렉션을 사용하여 클래스에서 데이터 어노테이션 속성을 추출해야합니까? 아니면 다른 방법이 있습니까? 데이터 주석을 HTML 속성으로 어떻게 출력합니까? 여기

+0

이 도움이 될 수 있습니다 ... HTTP : //msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.validationattribute (V = vs.110는) 내가 만들고 싶지 않다 –

+0

를 .aspx로 새로운 유효성 검사 속성은 기존의 것들이 괜찮지 만 Editor Template View로 전달되지 않는 ModelBinder를 구현하는 방식 때문에 가능합니다. – gisWeeper

답변

1

당신은 이동 :

foreach (PropertyInfo prop in Model.GetType().GetProperties()) 
{ 
    var annotations = prop.GetCustomAttributes(typeof(ValidationAttribute), false); 
    foreach(var annotation in annotations) 
    { 
     if(annotation is RequiredAttribute) 
     { 
      //... 
     } 
    } 
} 
+0

고마워요 DZL 내가 그런 식으로 일을 찾고 있었지만, 어떻게하면 내 mvc 솔루션을 구현하는이 적용되지 않을 수 있습니다. 나는 사용자 정의 DataAnnotationsModelMetadataProvider를 사용하여 속성에 대한 메타 데이터에 주석을 추가하는쪽으로 기울어 져있다. 아직 구현되지 않았는지 확실하지 않다. – gisWeeper

+0

@ gisWeeper 차이점이 어떻게 답을 적용하지 않을지 궁금 할 것입니다. 나는 비슷한 것을하고 뭔가를 놓치지 않기를 원합니다. 어쩌면 질문을 확장 할 수 있을까요? –

0

은 내가 등록 MVC에서 사용되는 사용자 정의 DataAnnotationsModelMetadataProvider (MpMetaDataProvider를) 구현이 작업을 수행하려면. 당신은 내가 특정 클래스의 특정 속성에 대한 데이터 주석을 반환하는 아래의 메소드를 호출 내 MpMetaDataProvider에서 Global.asax에

ModelMetadataProviders.Current = new MpMetaDataProvider(); 

의 Application_Start 이벤트에 등록. 나는 이것이 누군가를 돕기를 바랍니다.

this.GetMetadataForProperty(modelAccessor, modelProperty.Parent.EntityType, modelProperty.Name); 
관련 문제