2009-03-06 5 views
3

먼저 지적하자면,이 질문에 대한 대답은 쉽지 않습니다. 적어도 답을 찾는 것은 거의 불가능합니다.동적 추가 컨트롤 및 AJAX

UpdatePanel에서 필자는 패널 컨트롤에 일부 컨트롤을 동적으로 추가합니다.

이 모든 것은 컨트롤 asychrone에서 시작한 버튼 이벤트에서 발생합니다.

아래의 코드에서 위의 코드를 추가하면 버튼이 있습니다. 버튼은 또한 updatepanel에 배치됩니다. 이 버튼은 다음과 같이 호출됩니다. btn_editShowings

이제 btn_editShowings_Click 이벤트 처리기를 방문하면 동적 추가 컨트롤이 더 이상 존재하지 않습니다. 나는 또한 OnInit에서 그것들을 잡아려고했지만 그것들도 존재하지 않는다.

어떻게 F ... 동적 추가 컨트롤에서 데이터를 가져 오는 것이 가능합니까 ??? 어쨌든 거기에 있습니까? 그리고이 문제를 해결하는 데 얼마나 힘든 일이든 상관 없습니다.

UPDATE : 지금 내가 읽은 내용에서 LoadViewState 이전과 초기화 화재를 작동해야 다음을 수행하기 위해 노력했다

.

가 나는 버튼 이벤트

protected void Button2_Click(object sender, EventArgs e) 
    {  
     for (int i = j; i < showno + 4; i++) 
       { 
        UserControl uc = (UserControl)Page.LoadControl("Controls/BookShowing.ascx"); 
        uc.ID = "showing_" + i; 
        uc.Attributes.Add("runat", "Server"); 
        uc.EnableViewState = true; 
        uc.Visible = true; 
        pnl_showings.Controls.Add(uc); 
       } 
      UpdatePanel1.Update(); 
    } 

동적 일부 컨트롤을 추가하고 내 init 함수에서 같은 일을했다 : 보호 재정의 무효하는 OnInit (EventArgs입니다 전자) { base.OnInit (예) ; 나는이 때

 if (Session["ShowingsCount"] != null) 
     { 
      int noOfUCs = (int)Session["ShowingsCount"]; 
      for (int i = 1; i < noOfUCs; i++) 
      { 
       UserControl uc = (UserControl)Page.LoadControl("Controls/BookShowing.ascx"); 
       uc.ID = "showing_" + i; 
       uc.Attributes.Add("runat", "Server"); 
       uc.EnableViewState = true; 
       uc.Visible = true; 
       pnl_showings.Controls.Add(uc); 
      } 
      UpdatePanel1.Update(); 
     } 
    } 

는하지만 :

FindControl("showing_1").Visible = false; 

나는 null 참조 예외를 얻을.

최고 감사합니다. 진짜 Napster가 다시 고생했습니다.

답변

2
  1. 처음으로 컨트롤을 추가 할 때 viewstate에서 다시 만들어야하는 컨트롤 수를 추적하십시오.
  2. 그 후에 모든 포스트 백에서 LoadViewState 메서드에서 동일한 ID를 가진 페이지에 해당 컨트롤 수를 다시 추가해야합니다.

열쇠는 항상 페이지의 모든 포스트 백에 동적으로 생성 된 컨트롤을 추가해야한다는 것입니다 그리고 당신은 자신의 폼 게시 값이 다시로드 얻을 수있는 컨트롤의 순서를 viewstate가로드되기 전에 그것을해야 그들.

+0

나는 결코 LoadViewState 메서드를 입력하지 않습니까? 그 사건을 일으키기 위해 어떤 일도해야합니까? –

0
BookShowing bs = (BookShowing)UpdatePanel1.FindControl("showing_" + i); 

해결책이 있었습니까? OnInit 재정의가 실제로 작동했는데, 잘못된 방법으로 usercontrol을 가져 오는 것이 었습니다.

마감.