2009-03-16 7 views
2

뷰의 유형에 대한 공지가없는 컨트롤러에서 updateModel을 사용하려고합니다. 다른 유형의 다른 뷰가 있지만 모두 상속 된 유형의 ExternalBase 클래스가 있습니다.MVC Controller from view of UpdateModel

내 컨트롤러에는 항상 ExternalBase가 있지만 컨트롤러는 올바른 유형을 알지 못합니다.

저장시 올바른 개체를 가져 오는 메서드를 호출하지만 this를 externalBase로 반환합니다. innertype이 제 타입입니다. 내 객체 위로 마우스를 가져 가면 저장을 호출하는 뷰의 유형입니다. 이제 updateModel을 호출하면 속성이 채워지지 않습니다. 예를 들어

:

 MyExternalBase p = new Person(); 

     UpdateModel(p, "Person", form.ToValueProvider()); 
:

// MyExternalBase는 다음 내가 저장에 내 컨트롤러에서 빈 클래스

클래스 사람

public class Person 
    : MyExternalBase 
{ 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public List<TheParameters> Parameters { get; set; } 
    public Address Address { get; set; } 

    public TheParameters[] OtherParameters { get; set; } 
} 
public class Address 
{ 
    public string Street { get; set; } 
    public string City { get; set; } 
    public string State { get; set; } 
    public TheParameters Parameter { get; set; } 
} 
public class TheParameters 
{ 
    public string Parameter { get; set; } 
} 

입니다

이제 p가 채워지지 않습니다.

대신 Person p = new Person()을 사용하면 문제가되지 않습니다. 하지만 내 컨트롤러가 뷰 유형과 독립적 이길 원합니다.

이 오류는 updateModel 또는 이와 같은 오류일까요? 또는 그 해결 방법은 무엇입니까?

답변

0

나는이 답변을 알고 싶습니다. 모든 데이터가있는 올바른 유형으로 안전하게 다운 캐스트 할 수있을지라도 기본 클래스를 전달할 때 매우 모범적 인 문제가 있습니다.

올바른 유형의 basetype을 다운 캐스팅하지 않으면 UpdateModel이 내부 속성을 보지 못하는 것 같습니다. 그러나 올바른 유형을 얻으려면 switch 문이 필요합니다.

+0

[여기 답변입니다] (http://stackoverflow.com/questions/649733/mvc-controller-independent-of-type-of-view-updatemodel/3113012#3113012). – bzlm

6

당신이 .NET 4.0을 사용하는 경우, 다음 사용하십시오 :

그 상황에서
dynamic p = new Person(); 
UpdateModel(p); 

, UpdateModel가 제대로 작동합니다. 단일 컨트롤러에서 작업 할 때이 문제가 발생하여 같은 유형의 모든 개체를 상속하는 여러 개체에 사용하고 싶습니다.

+1

완전히 내가 필요한 것! 감사! – claco

+0

정말 좋은! 나는 내가 그걸 생각했을 것이라고 생각하지 않는다. – PeterS

+0

정말 좋은 사람 :) – eka808