2009-04-15 4 views
0

동적 제어 :내가 ASP.NET에서 동적 제어 생성 텍스트의이 작품에 대해 읽어 생성

... 동적 컨트롤을 사용하는 경우, 당신은 그들 만 다음 다시 게시 될 때까지 존재 것이라는 점을 기억해야한다 . ASP.NET 은 동적으로 추가 된 컨트롤을 다시 만들지 않습니다. 컨트롤을 여러 번 다시 만들어야하는 경우 Page.Load 이벤트 처리기에서 컨트롤 만들기를 수행해야합니다. 여기에는 동적 컨트롤을 사용하여 뷰 상태를 사용할 수있는 추가 이점이 있습니다. 당신이 Page.Load 이벤트의 처리기에서 컨트롤을 만드는 경우 뷰 상태는 일반적으로 Page.Load 이벤트 전에 복원 하더라도, 는 ASP.NET은 후 어떤 뷰 상태를이 가지고 정보를 적용합니다 Page.Load 이벤트 핸들러가 종료됩니다.

<asp:Button ID="Button1" runat="server" Text="Button" 
      onclick="Button1_Click" /> 

동적에 코드 5 개 체크 박스 뒤에 - -

protected void Page_Load(object sender, EventArgs e) 
{ 
    for (int i = 0; i <= 5; i++) 
    { 
     var chBox = new HtmlInputCheckBox(); 
     Controls.Add(chBox); 
    } 

} 

이 과정은

내가 선언적 버튼을 만들 예에 변경을 원했고 ... 자동
입니다 하지만 일부 체크 박스를 체크하고 버튼을 누르면 포스트 백 이후 모든 체크 박스가 상태가 지워집니다. ASP.NET은 동적 컨트롤의 뷰 상태를 자동으로 관리하지 않습니다. ? 각 확인란 및 전체 페이지에 대한보기 상태를 사용하려고 시도했지만 하지만 작동하지 않습니다. 누군가 설명 할 수 있습니까? 1. 왜 그렇게됩니까? 2. 이것을 피하는 방법은 무엇입니까?

+0

안녕하세요. 내 의견에 업데이트 된 코드를 참조하십시오. 그렇지 않다면 저에게 의견을 쓰십시오. 제가 도울 수 있는지 알게 될 것입니다. – Kirtan

답변

0

Page_Init에서 컨트롤을 만들 수 있습니다. 그 후

protected void Page_Init(object sender, EventArguments e) 
{ 
    //Generate the checkboxes dynamically here. 
    CheckBox c; 
    for (int i = 0; i < 5; i++) { 
    c = new CheckBox(); 
    c.ID = "Checkbox" + i.ToString(); 

    divContainer.Controls.Add(c); //create a div with runat="Server" attribute or use an asp:Panel, etc. container controls. 
    } 
} 

은 다시 단추를 클릭하십시오, 상태가 항상 유지됩니다.

+0

당신과 앤드류 헤어 말했듯이 내가 그것을했다,하지만 변화, 난 할 수 여기에 내 aspx 게시? – ge1serf

+0

divContainer 힌트 주셔서 감사! – ge1serf

2

ASP.NET이 복원 된 POST 값을 사용하려면 이러한 컨트롤이로드 전에 페이지의 일부 여야하기 때문입니다. 이 작업을 수행하려면 가능한 경우 페이지의 OnInit 컨트롤을 만들어야합니다.

+0

개인 무효 Page_Init (개체 발신자, 시스템.(int i = 0; i <= 5; i ++) { var chBox = new HtmlInputCheckBox(); Controls.Add (chBox); } } 인용 영업 이익으로 변화 없음 :( – ge1serf

+0

,이 PageLoad –

+0

에서 만든 컨트롤에 대해 이미 작동 나는 두 가지 방법으로 ID를 설정하려고 – ge1serf

0

포스트 백을 통해 동기화 될 수 있도록 각 동적 컨트롤의 ID를 설정해야합니다.

0

내가 알고있는 것처럼 -이 곳하는 OnInit 또는의 OnLoad 에서 컨트롤을 만드는 방법에 상관없이이 (하지만 일부 책에 onLoad에 제시) 문제는 그들에게을 배치하는 곳이다, - 경우 Controls.Add에 통해 장소 - 그것은 <form></form>에서 그들을 놓으십시오. 그래서 포스트 백 은 컨트롤의 상태를 취하지 않습니다. <form></form> 안에 자리 표시자를 cretating하고이 자리 표시 자에 동적 컨트롤을 추가하면 모든 것이 잘 작동합니다.