2012-09-08 4 views
0

ASP.Net 페이지에서 단추를 클릭 할 때마다 MyWUCtr.ascx을 추가하려고합니다.ASP.Net에서 동적으로 사용자 정의 컨트롤 추가

페이지로드 코드 :

if (!Page.IsPostBack) 
      { 
       Session["ctrid"] = "0"; 
      } 
      if (Session["myctrs"] != null) 
      { 
       Panel1.Controls.Clear(); 
       Panel p = ((Panel)Session["myctrs"]); 
       foreach (Control c in p.Controls) 
       { 
        if (c is UserControl) 
         Panel1.Controls.Add(c); 
       } 
      } 

버튼을 클릭 코드 :

int x = Convert.ToInt32(Session["ctrid"].ToString()); 

MyWUCtr ctr = LoadControl("~/MyWUCtr.ascx") as MyWUCtr; 
ctr.ID = "myctr" + x.ToString(); 

x++; 
Panel1.Controls.Add(ctr); 
Session["myctrs"] = Panel1; 
Session["ctrid"] = x.ToString(); 

이 컨트롤이 단 하나의 텍스트 상자버튼.

+1

무엇이 당신의 질문입니까? – nunespascal

답변

0

귀하의 질문에 어떤 문제가 있는지 분명하지 않습니다.

그러나 이벤트 핸들러에서 컨트롤을 동적으로 추가하는 경우 페이지가로드 될 때마다 동일한 순서로 동일한 ID로 컨트롤을 다시 만들고 다시 추가해야합니다. 이렇게하면 ViewState 에서처럼 추가 된 컨트롤의 수와 컨트롤의 Controls 컬렉션에 넣을 수있는 컨트롤의 차이 (있을 수있는 경우)가 추적됩니다.

ViewState는 상태를 복원 할 수 있지만 페이지 제어 트리에 이미 존재해야합니다. 그러므로 다시 만들어야 할 필요성. GridView와 같은 Microsoft에서 제공하는 컨트롤은 내부적으로 수행하므로 (다시 바인드하지 않아도 DataItemCreated 이벤트가 발생합니다), 이벤트에 반응하여 추가 및 추가하는 경우 다시 게시 한 후에 다시 작성해야합니다.

페이지를로드 할 때 자동으로 생성되는 컨트롤은 마크 업으로 선언 된 컨트롤뿐임을 유의해야합니다. 그 밖의 모든 것, 매번 추가해야합니다.

+0

단추의 클릭 이벤트에 webusercontrol.ascx를 추가하고 싶습니다. 이 경우 다음 코드를 사용합니다 :
및 버튼 클릭 UserControl ctr = (UserControl) LoadControl ("MyWUCtr.ascx"); Panel1.Controls.Add (ctr); –

+0

@vishnusaini하지만 무슨 일 이니? 어떤 일이 일어나기를 원하지 않거나 일어나는 일이 일어나지 않습니다. 추가 된 컨트롤이 포스트 백간에 유지되지 않는다면 언급 한 이유 때문에 거의 확실합니다. 컨트롤을 표시하려면 포스트가있을 때마다 컨트롤을 모두 다시 만들어야합니다. –

+0

버튼을 클릭 할 때마다 컨트롤을 추가 할 수 없습니다. –

관련 문제