3

파생 개체 목록 2.MVC2 ModelBinder를 내가 Asp.net MVC에서 기본 ModelBinder를 작업 다른 (파생) 개체 유형의 목록을 원하는

나는 다음 뷰 모델이 있습니다

public class ItemFormModel 
    {  
     [Required(ErrorMessage = "Required Field")] 
     public string Name { get; set; } 
     public string Description { get; set; } 

     [ScaffoldColumn(true)] 
     //public List<Core.Object> Objects { get; set; }  
     public ArrayList Objects { get; set; }     
    } 

그리고 목록에는 diffent 파생 된 유형의 객체가 들어 있습니다.

public class TextObject : Core.Object 
    { 
     public string Text { get; set; } 
    } 

    public class BoolObject : Core.Object 
    { 
     public bool Value { get; set; } 
    } 

나는 목록 또는 ArrayList를 구현, 모든이의 잘 형태로 스캐 폴딩 얻을하지만 ActionResult에 다시 게시 할 때 ModelBinder를 나를 위해 파생 된 개체 유형의 속성을 확인하지 않습니다를 사용하는 경우 그것은 중요하지 않습니다 .

Viewmodel 구조가 처리 할 다른 객체 유형의 목록을 얻는 좋은 해결책이 될 수 있습니까? 모든 객체 유형 (예 : 목록, 목록 등)에 대한 추가 목록을 갖는 것이 나에게 좋은 해결책이 아닌 것처럼 보입니다. 이는 뷰 모델을 만들고 도메인 모델에 다시 매핑하는 데 많은 오버 헤드가되기 때문입니다.

커스텀 모델 바인더의 모든 속성을 바인딩하는 다른 접근 방법을 생각해보십시오. 오버 헤드없이 많은 데이터 주석 접근법 (여기서는 필수 속성 등의 유효성 검사 등)을 어떻게 활용할 수 있습니까?

답변

4

Derived Type ModelBinder in MvcContrib을 확인하십시오. 이를 통해 RenderTypedPartial (...) 도우미를 사용할 때 자동으로 처리되는 'typestamping'프로세스를 통해 파생 된 유형에 모델을 바인딩 할 수 있습니다. MvcContrib 부분은 부분 구조 전반에 걸친 바인딩 상태를 유지하므로 Name/Id 접두사가 딥 객체 그래프에서 올바르게 유지 관리됩니다. 템플릿과 같은 다른 메커니즘을 사용하는 경우 직접 입력 스탬프를 처리해야합니다. 이것은 문서 페이지에서 설명합니다.

다시 질문하고 ModelBinder를 사용하여 파생 형식을 해결하는 방법은 파생 형식 변형을 WCF KnownTypeAttribute와 유사한 메커니즘의 특성으로 등록하거나 시작시 등록을 수행 할 수 있습니다. 어느 쪽이든, 이러한 유사 콘텐츠는 한 번 등록되고 성능 고려 사항으로 유지됩니다.

모델 바인더는 데이터 주석/유효성 검사 특성을 방해하지 않는 방식으로이 문제를 해결합니다. 다른 시나리오에서는 예상대로 작동합니다.

+0

현재 MVC 4 이상에서는 사용할 수 없습니다. –