2012-05-07 8 views
0

내 ASP MVC 3 프로젝트에서 다음과 같은 클래스 계층 구조가 있습니다. 일부 항목은 컨테이너를 가질 수 있으며 컨테이너는 내용을 내부에 가질 수 있습니다. 컨테이너 및 내용 클래스는 추상 클래스입니다.ASP MVC 3 ajax with json model with complex class 바인딩

Hierarchy

나는 브라우저에서 JSON 요청을 수신하고, 엔트리 클래스의 유형 인 모델을 결합해야합니다. 문제는 DefaultModelBinder 클래스가 있어야하는 콘크리트 컨테이너의 유형을 알지 못하기 때문에 Entry 모델 클래스를 올바르게 작성하지 않았다는 것입니다. 예를 들어 :

var dataaa = { Name: 'Some Name', Containers: [{ ContainerId: 0}] }; 
    $.ajax({ 
     url: 'Add', 
     type: "POST", 
     data: JSON.stringify(dataaa), 
     contentType: 'application/json; charset=utf-8', 
     success: function (data) { 
      alert('hello'); 
     }); 

+

[HttpPost] 
public string Add(Entry entry) 
{ 
    return "foo"; 
} 

다음 요청은 서버 예외로 연결 : 는 추상 클래스를 만들 수 없습니다.

{ Name: 'Some Name', Containers: [{ Type: 'FullContainer', ContainerId: 0}] }; 

어떻게 FullContainer 클래스에 'FullContainer'로 설정 유형 필드를 가지고 객체를 매핑하는 메커니즘을 결합 모델을 지시하는 : 나는 예를 들어 요청을 JSON으로 유형 필드를 추가 할 수 있습니까?

답변

0

엔트리는보기 모델입니까? 기본 항목에 포함 된 속성이 Full Container 유형이라도 게시물에 충분합니까? 뷰 모델이 아니지만 정말 필요한 것이면 EntryViewModel 클래스를 추상화하지 말 것을 권합니다.

그렇지 않으면 Darin의 대답 Polymorphic model binding을 확인하십시오.