2011-12-04 2 views
9

사용자 정의 컨트롤을 만들었습니다.매개 변수로 사용자 정의 컨트롤을 동적으로로드하십시오.

public partial class Controls_pageGeneral : System.Web.UI.UserControl 
{ 

    private int pageId; 
    private int itemIndex; 

    public int PageId 
    { 
     get { return pageId; } 
     set { pageId = value; } 
    } 

    public int ItemIndex 
    { 
     get { return itemIndex; } 
     set { itemIndex = value; } 
    } 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     // something very cool happens here, according to the values of pageId and itemIndex 
    } 

} 

지금 동적으로이 컨트롤을 만들고이를 매개 변수 통과 싶다. LoadControl 함수를 사용해 보았지만 문자열 (경로)이있는 구조와 유형 t 및 매개 변수 배열이있는 구조의 두 가지 구조 만 있습니다.

첫 번째 방법은 작동하지만 내 매개 변수 때문에 LoadControl의 더 복잡한 방법을 사용해야하지만 사용 방법은 모르겠다. 어떻게하면 그 이상한 객체 Type t에 대한 내 컨트롤의 경로 문자열을 얻을 수 있습니까?

도움 주셔서 감사합니다.

답변

10

두 번째 방법은 적절한 생성자에 전달 된 매개 변수를 받아들이지 만 사용자가 컨트롤에 생성자를 전혀 갖고 있지 않으므로 관련이 없습니다.

그냥 적절한 형식으로 캐스팅의 .ascx 파일의 경로를 사용하여 컨트롤을로드하고 특성을 하나 하나 설정 :

당신이 생성자를 사용하여 주장하는 경우
Controls_pageGeneral myControl = (Controls_pageGeneral)Page.LoadControl("path here"); 
myControl.PageId = 1; 
myControl.ItemIndex = 2; 

, 최초 추가

public Controls_pageGeneral(int pageId, int itemIndex) 
{ 
    //code here.. 
} 
에게

: 그리고

Page.LoadControl(typeof(Controls_pageGeneral), new object[] {1, 2}); 

가 abov과 동일 할 것 e는 런타임 코드로서 두 개의 정수를 받아들이고 그것을 사용하는 생성자를 찾는다.

+0

네임 스페이스를 내가 사용해야합니까? 내 Controls_pageGeneral이 페이지에 알려지지 않은 것 같습니다. – SRachamim

+0

그것은 당신의 클래스입니다. 다른 웹 어플리케이션에 있다면 그렇게 할 수 없습니다. 그렇지 않으면 자신의 어플리케이션에 추가하십시오. –

+0

아니요, 동일한 웹 응용 프로그램 (web.config에 정의 됨)에 있습니다. – SRachamim

0

이 방법을 사용하면 컨테이너에 추가 할 때 UserWebControl의 HTML을 볼 수 없습니다.

는 여기를 참조하십시오 :

http://blah.winsmarts.com/2006/05/20/loadcontrol-a-usercontrol--and-pass-in-constructor-parameters.aspx

+1

이것이 이론적으로 질문에 대답 할 수 있지만 여기에 대답의 핵심 부분을 포함하고 참조 용 링크를 제공하는 것이 바람직합니다 (// meta.stackoverflow.com/q/8259). –

관련 문제