1

내가 알고 싶은 것은 UserControl에 사용할 수있는 것과 같이 HttpContext 렌더링에 매개 변수를 삽입하는 기법이 있고 페이지 수명주기 이벤트 (Page_Init, Page_Load)가 렌더링 중에 호출됩니다 (HttpContext.Current.Server.Execute() 동안)?특수하게하지 않고 동적으로 생성 된 UserControls에 매개 변수 삽입

이러한 기술을 사용하면 동적 렌더링을 위해 특수화하지 않고도 모든 UserControl에 데이터를 삽입 할 수 있습니다 (예 : 원격 서비스 호출). ASPX 페이지에서 정적 컨트롤 인 경우와 같은 방법으로로드됩니다. 이 기본 코드 단편

시작 : 나는 그가 그의 UserControls의 각 데이터 멤버를 추가하고 전에 해당 멤버에 데이터 소스를 주입하는 반사를 사용하는 @ScottGu ViewManager 예를 본 적이

Page page = new Page(); 
UserControl ctl = (UserControl)page.LoadControl(controlSpec); 
page.Controls.Add(ctl); 

// want to inject data into the control at this point 

StringWriter writer = new StringWriter(); 
HttpContext.Current.Server.Execute(page, writer, true); 
String renderedContent = writer.ToString(); 
return renderedContent; 

컨트롤은 HTML로 렌더링됩니다.

Stefan Sedich's도 @ScottGu 예제를 사용하여 동일한 내용을 허용하지만 리플렉션을 피할 수있는 일반 ViewManager<Control>을 가져 오는 것으로 나타났습니다.

예를 들어 UserControl을 렌더링하기 전에 HttpContext에서 Request 개체 또는 QueryString에 매개 변수를 추가하고 싶습니다.

답변

0

UserControl 개체를 상속 한 응용 프로그램에 대한 새로운 컨트롤 기본 클래스를 만드는 것이 고려되면 사용자 지정 컨트롤은 사용자 정의 컨트롤 대신 해당 클래스를 기반으로합니다. 그런 다음 컨트롤에서 액세스 할 수있는 기본 클래스의 컨트롤에 데이터를 주입하는 메서드를 만들 수 있습니다.

public class DataDrivenUserControl : UserControl 
{ 
// implement stuff here 
} 

귀하의 컨트롤은이 클래스

DataDrivenUserControl ctl = (UDataDrivenUserControl)page.LoadControl(controlSpec); 
page.Controls.Add(ctl); 
ctl.InjectData(data);// or however you want to implement data injection methods 

일반적으로 내가 추천 woldn't 더 상속 깊이 하나 개의 기능에서 상속 할 수 있지만, 여기서 일 수 있습니다.

+0

당신이 제안하는 것은 실행 가능한 해결책이지만, 나에게는보기에 좋지 않은 것처럼 보입니다. 게다가, 그것은 피하려고 노력하고있는 UserControl을 전문화해야합니다. –

관련 문제