2008-10-08 3 views
0

아래에 설명 된 문제는 "내 컨트롤이 페이지가로드 될 때마다 같은 값을 표시하는 것과 거의 정반대입니다. 바람직.ListBox는 데이터 바인딩 후도 게시 된 값을 유지합니다.

내가 심지어 포스트 백에서 페이지로드 이벤트에 바인딩되고있는 목록 상자가 있습니다.

selectedIndex의에 대한 이벤트 핸들러가 명중 변경된

, 제어는 어떻게 든에도 불구하고 게시 된 값을 가지고 이미 다시 바인딩되었으므로이 시점에서 selectedindex가 없어야합니다.

누구나 가능할 수있는 방법을 알고 있습니다.

편집 :

가 selectedIndex의 참으로 당신은 다음과 같은 간단한 마크 업 형태로 만들 수 있습니다 재설정되고 있음을 입증하려면 다음 코드와

<label for="textbox1">Original Posted Value: </label> 
    <asp:TextBox runat="server" ID="textbox1" /> 
    <asp:DropDownList runat="server" ID="dropdown" OnSelectedIndexChanged="dropdown_SelectedIndexChanged" AutoPostBack="true" /> 
    <label for="textbox2">Value at point handler is hit: </label> 
    <asp:TextBox runat="server" ID="textbox2" /> 

.cs의를

 protected void Page_Load(object sender, EventArgs e) 
    { 
     textbox1.Text = dropdown.SelectedIndex.ToString(); 
     dropdown.DataSource = new string[] { "none", "A", "B", "C" }; 
     dropdown.DataBind(); 
    } 
    protected void dropdown_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     textbox2.Text = dropdown.SelectedIndex.ToString(); 
    } 

두 번째 텍스트 상자의 값은 항상 0이됩니다.

답변

1

T 여기서 문제는 데이터 소스가 포스트 백을 포함하여 각 페이지로드에서 다시 할당되고 다시 바인딩된다는 것입니다. 선택한 인덱스가 변경된 다음 다시 0으로 변경됩니다. 포스트 백을 음극화하고 .cs에서이 같은 포스트 백 (초기로드)이 아닌 데이터 소스 만 설정하십시오.

보호 된 무효 Page_Load 보낸 사람, EventArgs)

{ 
     if (Page.IsPostBack) 
     { 
      textbox1.Text = dropdown.SelectedIndex.ToString(); 
     } 
     else 
     { 
      dropdown.DataSource = new string[] { "none", "A", "B", "C" }; 
      dropdown.DataBind(); 
     } 
    } 

    protected void dropdown_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     textbox2.Text = dropdown.SelectedIndex.ToString(); 
    }