【问题标题】:ListBox retains posted value even after being databound即使在数据绑定之后,ListBox 仍保留发布的值
【发布时间】:2010-09-16 00:34:55
【问题描述】:

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

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

当 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。

【问题讨论】:

    标签: asp.net vb.net webforms


    【解决方案1】:

    这里的问题是数据源在每个页面加载(包括回发)时都被重新分配和重新绑定。所选索引已更改,然后更改回 0。 尝试 cathcing 回发,并且仅在它不是 .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();
        }
    

    【讨论】:

      猜你喜欢
      • 2020-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-27
      • 1970-01-01
      • 2019-09-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多