2008-10-07 3 views
1

이 문제를 모두 명확히하기 위해 컨트롤 리 바인드에서 비롯된 것이 아니며 값을 바인딩 한 후에도 초기 값으로 유지되지 않습니다.DropDownList는 언제 SelectedIndexChanged 이벤트 처리기에서 포스트 백 값을 유지합니까

여러 프로젝트에서 사용되는 aspx 페이지에 DropDownList가 있습니다.

페이지의 수명주기에 따라 SelectedValue는 SelectedIndexChanged 이벤트를 처리하기 전에 변경됩니다.

하나의 프로젝트에서 코드가 이벤트 핸들러에 도달하면 SelectedValue는 클라이언트에서 게시 된 것으로 돌아가고 다른 하나는 새로운 SelectedValue가 나타납니다.

Viewstate가 켜져있는 경우, 컨트롤이 리바운드되지 않고 수집 할 수있는 것과 동일한 흐름을 따라옵니다.

컨트롤을 다시 초기화하지 않습니다.이를 철저히 검사하고 초기 값을 유지하지 않고 코드에 설정된 값을 유지합니다.

실제로 첫 번째 프로젝트에서 발생하는 것처럼 이벤트 처리기 지점에 게시 된 값이 필요하지만 게시 된 값으로 다시 변경되는 이유와 두 번째 프로젝트에서이 동작을 복제하는 방법을 이해하지 못합니다.

이 내용이 명확하지 않은 경우 추가로 명확히 설명 드리겠습니다.

답변

2

테스트에서 IsPostBack을 사용하여 페이지가 다시 게시되었는지 확인하지 않았기 때문에 일부 초기화가 on_load 이벤트에서 두 번 수행 되었습니까?

그것은 정확히 내가 어딘가에서 IsPostBack을 확인 잊어 버린 때 나는 보통이 동작을 볼 :-)

+0

컨트롤이 다시 바인딩되지 않고 논리가 포스트 백과 관련이 없습니다. – YonahW

0

십분 전에 내 동료 중 하나에 발생합니다. 이 페이지는 SelectedIndexChanged 이벤트 처리기로 이동하기 전에 모든 원본 데이터를로드합니다.

2

많은 사람들은 DropDownLists가 선택한 값을 유지할 수 있도록 ViewState를 가져야한다고 잘못 생각합니다. 게시 된 값이있는 양식에서 제대로 작동하기 때문에 EnableViewState를 DropDownLists에서 True로 설정 한 적이 거의 없습니다. (데이터 바인딩 컨트롤에서 true로 설정하면 긴 viewstate가됩니다.) OnInit 이후의 게시 된 값 (드롭 다운의 선택한 항목)이 페이지에서로드되어 있으므로 데이터를 바인딩하면 OnInit의 드롭 다운에서 제대로 작동합니다.

OnLoad에 바인딩하면 선택한 값이 덮어 쓰기됩니다.

아마도 당신은 잘못된 값으로 데이터 바인딩을하고있어서 드롭 다운의 DataBind 호출에 의해 선택된 값이 오버라이드 될 수 있습니까?

+0

나는 viewstate가 필요 없다고 생각했지만 인상적이었습니다. 비록 SelectedValue를 변경하고 있지만 컨트롤을 리 바인드하지 않고 코드가 두 프로젝트에서 정확히 동일하지만 값이 손실되지 않습니다. – YonahW

관련 문제