2009-06-03 7 views
0

포스트 백을 수행하고 viewstate가 다음 코드에서 선택한 값을 기억하도록 할 수 있습니까?asp.net의 동적 컨트롤

placeholder1.controls.clear()가 삭제하는 것 같습니다.

protected void Page_Load(object sender, EventArgs e) 
{ 
    bind(); 
} 
protected void bind() 
{ 
    PlaceHolder1.Controls.Clear();   
    DropDownList ddl = new DropDownList() { AutoPostBack = true, ID="ddl" }; 
    ddl.SelectedIndexChanged += new EventHandler(ddl_SelectedIndexChanged); 
    ddl.Items.Add("hi"); 
    ddl.Items.Add("bye"); 
    PlaceHolder1.Controls.Add(ddl); 
} 
void ddl_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    bind(); 
} 
+0

Page_Init에 추가하려고 시도했지만 작동하지 않았습니다. – maxp

답변

0

Visible을 false로 설정하여 PlaceHolder를 숨기지 않는 이유는 무엇입니까? 또한 동적 제어가 직접적으로 쉽지 않기 때문에 물건을 동적으로 주입해야 할 때 주위를 돌아 다니려면 Truly Understanding Dynamic Controls을 참조하십시오.

1

PlaceHolder1.Controls.Clear(); 방법을 제거

을 시도하고 Page_Load에서 그리고 당신은 부하로이 일을하고있는 라이프 사이클 문제에 방법을 실행하는거야 OnInit

Bind() 전화를 이동 viewstate & 컨트롤을 다시 만들기 전에 이벤트 발생 코드가 이미 발생했습니다.

+0

placeholder1.controls.clear()를 제거하면 동일한 ID를 사용하여 컨트롤을 두 번 만들려고하면 오류가 발생합니다. – maxp

+0

아니요. 컨트롤은 이후의 새로 고침 다시 게시 할 때마다 동적으로 다시 작성됩니다. PlaceHolder1.Controls에는 처음부터 아무 것도 들어 있지 않습니다. 그것을 시도하십시오 –

+0

나는 당신의 메시지를 Bind(); Page_Load (o, e)에서 Page_Init (o, e)로 이동합니다. ddl이 postbackould을 일으킨 후에 Page_Init()은 Bind()를 실행하고 SelectedIndexChanged()는 Bind()가 다시 실행되도록합니다. 따라서 같은 id를 가진 자리 표시 자 1에 두 개의 컨트롤이있는 예외가 발생합니다. 'OnInit?'을 잘못 해석 한 적이 있습니까? – maxp

1

Page_Init()에서 bind()를 호출 해보십시오.

ViewState는 Page_Init() 이후 Page_Load()보다 먼저로드되므로 Page_Load()에서 bind()를 호출하면 .NET에서 시도한 후 DropDownList의 선택한 값을 설정하지 못한 후에 호출됩니다.

1

viewstate가 선택한 값을 기억하도록 할 수 있습니까?

ViewState 데이터는 전에로드 이벤트 이전에 복원됩니다. ViewState가 컨트롤을 위해을 기억하게하려면 해당 컨트롤 은로드 이벤트 전에 페이지에이 있어야합니다.

문제의 일부분은 선택 인덱스가 변경되었을 때 드롭 다운 목록 컨트롤을 다시 만들지 만 코드에서 아무 것도 선택 인덱스를 설정하지 않으므로 설정을 할 때마다 선택 항목을 삭제한다는 것입니다.