【问题标题】:SelectedIndexChanged event handler getting old indexSelectedIndexChanged 事件处理程序获取旧索引
【发布时间】:2010-09-09 16:05:46
【问题描述】:

我正在处理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>

这里是 DropDownList OnSelectedIndexChanged 事件处理程序:

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

【问题讨论】:

    标签: c# asp.net webforms


    【解决方案1】:

    如果您使用的是 AJAX,您可能还会进行回调,而不是完整的回发。在这种情况下,您可能希望在页面加载方法中使用它:

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

    【讨论】:

    • 这是真的吗?我很确定IsPostBack 在这两种情况下都会返回true。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      添加这个: 如果 page.isnotpostback {

      } 围绕您的代码绑定下拉列表。

      【讨论】:

        【解决方案4】:

        您是否可以在整个数据源中为下拉列表复制项目?

        【讨论】:

          【解决方案5】:

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

          当页面重新加载时,您会看到新值吗?

          【讨论】:

          • 是的,这也是我首先想到的。
          • 我检查并惊讶地发现我确实在 Page_Load 中有一些代码重新默认了该值。谢谢米切尔!
          • 五年后,仍然有意义。 “陷阱”是runat="server" 将触发帖子,调用Page_Load 和整个shebang,这可能不会立即明显。
          猜你喜欢
          • 1970-01-01
          • 2011-03-15
          • 2019-01-04
          • 1970-01-01
          • 2013-05-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多