即使在数据绑定后,ListBox仍保留已发布的值

时间:2008-10-08 14:00:27

标签: asp.net vb.net webforms

请注意,下面描述的问题几乎与常见问题完全相反“我的控件在每次页面加载时显示相同的值。我理解表达的行为通常是不可取的。

我有一个列表框,即使在回发时也会在页面加载事件中进行数据绑定。

当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 个答案:

答案 0 :(得分:1)

这里的问题是数据源正在重新分配并在每个页面加载上重新绑定,包括回发。选定的索引将更改,然后再更改为0。 试试阴影回发,只设置数据源,如果它不是回传(初始加载),如.cs

protected void Page_Load(object sender,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();
    }