SelectedIndexChanged事件处理程序获取旧索引

时间:2020-03-05 18:56:44  来源:igfitidea点击:

我正在处理onSelectIndexChanged事件。当DropDownList选择更改时,引发一个事件。问题是DropDownList仍返回" SelectedValue"和" SelectedIndex"的旧值。我究竟做错了什么?

这是来自aspx文件的DropDownList定义:

<div style="margin: 0px; padding: 0px 1em 0px 0px;">
    <span style="margin: 0px; padding: 0px; vertical-align: top;">Route:</span>
    <asp:DropDownList id="Select1" runat="server" onselectedindexchanged="index_changed" AutoPostBack="true">
    </asp:DropDownList>
    <asp:Literal ID="Literal1" runat="server"></asp:Literal>
</div>

这是DropDownListOnSelectedIndexChanged事件处理程序:

protected void index_changed(object sender, EventArgs e)
{
    decimal d = Convert.ToDecimal( Select1.SelectedValue );
    Literal1.Text = d.ToString();
}

解决方案

回答

页面加载中是否有任何代码会偶然将该值重新默认为第一个值?

重新加载页面时,我们会看到新值吗?

回答

是否有可能在整个数据源中复制了用于下拉列表的项目?

回答

添加以下内容:
如果page.isnotpostback {

}
在代码周围绑定下拉列表。

回答

这似乎很明显,但是无论如何。
我们是否在其他事件处理程序(如OnLoad)中使用初始值初始化此下拉列表?
如果是这样,则应检查该事件是由回发还是由第一次加载引起的。所以你应该有这样的东西

if(!IsPostback) d.SelectedValue = "Default"

回答

如果我们使用的是AJAX,则可能还会执行回调,而不是完整的回发。在这种情况下,我们可能需要在页面加载方法中使用此方法:

if (!IsCallback && !IsPostBack)
        {
            // Do your page setup here
        }