2012-03-26 2 views
1

관리자가 일부 사진을 편집 할 수있는 페이지를 가지고있어 모든 컨트롤이 Dynamiclly로 추가됩니다.ASP.NET:adding controls 동적으로 다른 페이지로 돌아 가기

저는 컨트롤을 패널에 추가 한 다음 Form.Controls에 패널을 추가합니다. 모든 데이터는 flickr에서 가져옵니다.

내 문제는 내가 다시 flickr에서 데이터를 얻을 경우에도 불구하고 게시물을 다시 목록 변경 및 컨트롤이로드됩니다,하지만 텍스트 상자의 게시물 befor 게시물을 유지하고있다.

나는 모든 것을 잘 작동하는 텍스트 상자를 사용하여이 작업을 수행 할 수 있습니다. 목록은 약 10 개 이상의 사진이며이 번호는 앞으로 바뀔 수 있습니다. (프로그래밍 꽤 새로운 지저분한 코드 메신저 죄송합니다)

이 여기에 코드입니다 :

protected void Page_Load(object sender, EventArgs e) 
    { 

     if (!Page.IsPostBack) 
     { 
      RadioButtonList1.AutoPostBack = true; 

      selectedSetID = getSelectedSetId(RadioButtonList1.SelectedItem.Text); 

      photoSet = new MyPhotoSet(selectedSetID); 
      photo = new FlickerImages[photoSet.Count]; 

      for (int j = 0; j < photo.Length; j++) 
      { 
       photo[j] = new FlickerImages(photoSet.MediumURLS[j], photoSet.ThumbnailURLS[j],         photoSet.Titles[j], photoSet.Descreption[j], photoSet.PhotosID[j]); 

       panel = photo[j].GetPanelWithEditControls(j); 

       button = new Button(); 
       button.ID = "sendDataButton" + j; 
       button.Text = "send data"; 
       button.Click += button_Click; 

       panel.Controls.Add(button); 
       Form.Controls.Add(panel); 
      } 

     } 
     else 
     { 
       //here is the post back, 
every thing load fine. 
adding and removing the controls but if the textbox's load in the same place, it hold the same data befor the post back. 

      RadioButtonList1.AutoPostBack = true; 
      selectedSetID = getSelectedSetId(RadioButtonList1.SelectedItem.Text); 

      photoSet = new MyPhotoSet(selectedSetID); 
      photo = new FlickerImages[photoSet.Count]; 

      for (int i = 0; i < photo.Length; i++) 
      { 
       photo[i] = new FlickerImages(photoSet.MediumURLS[i], photoSet.ThumbnailURLS[i],          photoSet.Titles[i], photoSet.Descreption[i], photoSet.PhotosID[i]); 

       panel = photo[i].GetPanelWithEditControls(i); 

       button = new Button(); 
       button.ID = "sendDataButton" + i; 
       button.Text = "send data"; 
       button.Click += button_Click; 

       panel.Controls.Add(button); 
       Form.Controls.Add(panel); 
      } 

     } 
    } 

(내 영어 죄송합니다)

답변

4

대신하여 Page_Load에서 컨트롤 생성을 넣어, 넣어 Page_Init에 있습니다.

ASP.NET에 익숙하지 않다고 언급 했으므로 Page Lifecycle을 읽어 보시기 바랍니다.

ASP.NET 개발자는 서버가 aspx 페이지에 대한 요청을받는 시간과 페이지가 렌더링되도록 렌더링되는 시간 사이에 서버에서 특정 일이 언제 어떻게 발생 하는지를 이해하는 것이 매우 중요합니다 브라우저에서.

Page_Init에 코드를 삽입하는 것이 바람직한 이유에 대한 간단한 설명은 런타임에서 동적으로 생성 된 컨트롤과 Viewstate를 처리하는 방법입니다. Viewstate에는 웹 응용 프로그램의 사용자가 변경 한 내용이 들어 있습니다. 페이지 라이프 사이클에서는 ViewState 값의 적용이 Page_Load 이전에 발생하지만 Page_Init 이후에 발생한다는 것을 알 수 있습니다.

코드가 Page_Load 인 경우 컨트롤이 Viewstate에서 생성되고 사용자가 입력 한 내용으로 업데이트되지만 page_Load의 사용자 코드는 기본값으로 해당 컨트롤을 다시 생성한다는 것을 의미합니다. 사용자 입력을 다시로드 할 수있는이 이벤트 이후에는 아무 것도 발생하지 않습니다.

(하지 않으면 의미가 희망이. 페이지는 내가 더 잘 설명 할 수에 링크.)

가 다른 각도에서 피사체를 해결 here 다른 문서는, 그러나 여전히 당신을 위해 매우 도움이 될한다

.

매우 짧은 버전 here이 있습니다.

마지막으로 일반 영어로 된 것들을 설명하는 주제에 대한 가장 포괄적 인 기사 중 하나 인 (최후 최우수 절약)은 here입니다.

+0

probebly 내 문제 였고 도움을 주셔서 감사합니다 링크에 대한 시간이 좀 걸릴 것입니다 감사합니다 :) – samy

관련 문제