2010-05-26 2 views
2

강력한 형식을 유지하면서 부분 뷰와 그로 전달 된 데이터를 동적으로 선택하려는 ASP.NET MVC 응용 프로그램이 있습니다.ASP.NET MVC PartialView 제네릭 ModelView

그래서 기본 폼에서 부분 뷰의 뷰 모델에 대한 데이터를 포함해야하는 일반적으로 형식화 된 속성이 포함 된 뷰 모델이있는 클래스를 원합니다. 그것이 작동하는

Inherits="System.Web.Mvc.ViewUserControl<MainViewModel<ParticularViewModel>>" %> 

비록 내 부모 폼에서, 나는

Inherits="System.Web.Mvc.ViewPage<MainViewModel<ParticularViewModel>>" %> 

을 넣어해야합니다 사용자 정의 컨트롤에서

public class MainViewModel<T> 
{ 
    public T PartialViewsViewModel { get; set; } 
} 

는, 내가 좋아하는 일을하고 싶습니다.

이 문제를 해결할 방법이 있습니까? 유스 케이스는 사용자 컨트롤을 플러그 가능하게 만드는 것입니다. 나는 기본 클래스를 상속받을 수 있다는 것을 이해한다. 그러나 그것은 입력 된 뷰 모델 대신에 사전과 같은 것을 갖게 할 것이다.

+0

내 접근 방식을 변경하기로 결정했습니다. 주요보기를 위해 각 특정보기를 확장하여 MasterPage를 사용했습니다. 마스터 페이지에 추상적 뷰 모델 사용, 하위 페이지에서 마스터 페이지에 필요한 데이터를 제공하도록 강요합니다. –

답변

1

DisplayTemplates 및 EditorTemplates를 사용하여이를 수행 할 수 있습니다. 내가 바로 당신의 질문을 읽고 있어요한다면, 당신은이 같은 설정을 가지고 :

당신이 .NET 4.0 (공변 제네릭에 대한 야호!)를 사용하는 경우

System.Web.Mvc.ViewPage<MainViewModel<object>> 

당신이 .NET 3.5을 사용하는 경우 :

System.Web.Mvc.ViewPage<MainViewModel<object>> 

public class MainViewModel 
{ 
    public object PartialViewsViewModel { get; set; } 
} 

그런 다음 해당 개체에서 DisplayFor를 호출하여 부분보기를 얻을 수 있습니다. 따라서 다음을 호출합니다.

<%= Html.DisplayFor(m => m.PartialViewsViewModel) %> 

유형 이름의 스킨에 대한 템플릿을 DisplayTemplates 폴더에서 찾습니다. 따라서 DisplayTemplates에 SpecificViewModel.ascx가있는 경우 해당 컨트롤을 '부분보기'로 사용합니다. 다른 종류의보기 모델 유형을 사용하는 경우 OtherViewModel.ascx (예 :)를 검색하십시오.

ParticularViewModel.ascx에 대한 템플릿은 다음 것이다 : 당신이 강력한 형식의 모델로 오브젝트를 처리 할 수 ​​있습니다

System.Web.Mvc.ViewUserControl<ParticularViewModel> 

합니다.