2008-10-08 46 views
0

请注意,下面描述的问题几乎与“我的控件在每次加载页面时显示相同的值”这个常见问题完全相反,我理解表达的行为通常不是可取的。即使在数据绑定之后,ListBox仍然保留发布的值

我有一个正在被数据绑定在页面加载事件,甚至在回发一个列表框。

当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他在这里的问题是数据源被重新分配并重新绑定到每个页面上,包括回发。 尝试缩回回传,并且只设置数据源(如果它不是回发(初始加载),例如.cs中的这样的数据源)保护无效Page_Load(object发件人,EventArgs e)

{ 
     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(); 
    } 
相关问题