문제

ASP.NET MVC 2의 기본 모델 바인더로 작업하는 다른 (파생) 객체 유형 목록을 원합니다.

다음 뷰 모델이 있습니다.

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

그리고 목록에는 다른 파생 유형의 객체가 포함되어 있습니다.

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

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

목록이나 ArrayList 구현을 사용하는 것은 중요하지 않습니다. 모든 것이 양식에서 스캐 폴드되지만 ModelBinder는 ActionResult에 다시 게시 할 때 파생 된 객체 유형 속성을 해결하지 못합니다.

ViewModel 구조가 다른 객체 유형의 목록을 처리하기위한 좋은 솔루션은 무엇입니까? 모든 객체 유형 (예 : 목록, 목록 등)에 대한 추가 목록을 갖는 것은 나에게 좋은 솔루션이 아닌 것 같습니다. 이것은 ViewModel을 구축하고 도메인 모델에 다시 매핑 할 때 많은 오버 헤드이기 때문입니다.

사용자 정의 모델 바인더에서 모든 속성을 바인딩하는 다른 접근법에 대해 생각하면 어떻게 많은 오버 헤드없이 데이터 주석 접근법 (필요한 속성을 확인)을 어떻게 사용할 수 있습니까?

도움이 되었습니까?

해결책

확인하십시오 MVCContrib에서 파생 된 유형 ModelBinder. 이를 통해 'TypStamping'프로세스를 통해 파생 된 유형을 모델링 할 수 있습니다.이 프로세스는 RenderTypedPartial (...) 도우미를 사용할 때 자동으로 처리됩니다. MVCContrib 부분 부분에 걸쳐 결합 상태를 유지하므로 이름/ID 접두사가 깊은 객체 그래프에서 올바르게 유지됩니다. 템플릿과 같은 다른 메커니즘을 사용하는 경우 타이프 스탬프를 직접 처리해야합니다. 이것은 문서 페이지에 설명되어 있습니다.

질문으로 되돌아 와서 파생 유형이 모델 바인더로 어떻게 해결되는지, WCF KnownTypeatTribute와 유사한 메커니즘에 속성으로 파생 유형 변형을 등록하거나 시작시 등록을 수행 할 수 있습니다. 어느 쪽이든, 이러한 변형은 한 번 등록되어 성능 고려 사항을 위해 유지됩니다.

모델 바인더는 또한 데이터 주석/검증 속성을 방해하지 않는 방식 으로이 문제를 해결합니다. 그들은 다른 시나리오에서 기대하는대로 작동합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top