2009-06-02 4 views
1

ViewUserControl을 런타임에 ViewPage에 추가하는 것과 관련된 알려진 문제가 있는지 궁금합니다. 컨트롤을 선언적으로 추가하면 제대로 작동하지만 컨트롤을 프로그래밍 방식으로 추가하면 (이 경우 파일 뒤에있는 코드에서) 작동하지 않습니다. 오류가 발생하지 않고 컨트롤을 렌더링하지 않지만 디버거를 단계별 실행하면 페이지 수명주기의 관련 메서드가 호출되고 있음을 확인할 수 있습니다.ASP.NET MVC에서 동적으로 ViewUserControl 추가

ASP.NET MVC에서 파일 뒤에 코드를 사용하는 것이 그리 정교하지는 않지만 실제로 그렇게하고 싶은 이유가 있습니다.

답변

5

로드하려는 컨트롤 목록을 보내고 뷰 모델에 전달하십시오.

컨트롤러 조치 :

var controlsToLoad = new List<string>(); 
controlsToLoad.Add("foo"); 

return View(controlsToLoad); 

보기 :

<% foreach (var control in Model as List<string>) { %> 
    <% Html.RenderPartial(control); %> 
<% } %> 

이는 동적 뷰에로드 제어하는 ​​컨트롤러에 지정할 수 있습니다 아직도 당신이 뒤에 코드에서 유지됩니다.

+0

안녕하세요 John, 빠른 응답을 보내 주셔서 감사합니다. 이것을 할 수있는 유일한 방법입니까? 각기 다른 데이터를 가진 특정 PartialView 클래스의 임의의 개수의 인스턴스를 생성 할 수 있기를 바랍니다. –

+0

두 개의 속성으로 DTO를 만듭니다. 문자열 ControlName과 개체 데이터 다음에 해당 목록을 만들고 루프에서 RenderPartial (ControlName, Data); 컨트롤 관련 데이터를 전달합니다. –

0

다른 기능이 필요한 경우 확장 메서드에서 위의 제안을 확장 메서드에서 ViewPage 클래스로 래핑 할 수 있습니다.

관련 문제