DropdownList SelectedIndexChanged在UpdatePanel中未在转发器内部触发

时间:2014-01-29 10:48:48

标签: asp.net ajax updatepanel repeater

转发器内的控件放置在更新面板中。第一个ddl有国家,它的“selectedindexchanged”填补了第二个用于城市的ddl。填充文本框并选择国家/地区和城市后,单击“添加”按钮,所有控件的值将保留在转发器中。

enter image description here

当你再添加一些时,总是最后一个的ddlCountry会激活ddl_SelectedIndexChanged()。如果您尝试更改前一个的ddlCountry值,则不会执行.cs文件中的ddl_SelectedIndexChanged()。我检查了页面源:final ddlCountry的Id是

  

cphContent_ddlAddressCountry

并且前一个的ID被分配为:

  

cphContent_rpAddress_lblCountrym_0

cphContent指的是UpdatePanel,rp指的是Repeater。

我不知道如何在转发器中捕获ddl的Id。

1 个答案:

答案 0 :(得分:0)

可以通过以下几种方式在转发器中捕获控件:

  1. 在转发器的ItemDatabound事件(或其他事件之一)中使用FindControl()方法。
  2. 在SelectedIndexChanged()事件中。 sender参数可以是DropDownList。
  3. 从SelectedIndexChanged()事件中获取城市ddl的代码示例:

    protected void ddlCountry_SelectedIndexChanged(object sender, EventArgs e)
        {
            var ddlCountry = sender as DropDownList;
            var ddlCity = ddlCountry.Parent.FindControl("ddlCity") as DropDownList;
            ddlCity.DataSource = GetCities(ddlCountry.SelectedValue);
            ddlCity.DataBind();
        }
    

    您应该记住,将转发器与不同的数据集进行数据绑定可能会弄乱下拉列表的ID,从而搞乱了SelectedIndexChanged事件的触发,因为此事件依赖于将发布的值与viewstate /比较controlstate值两者都附加到控件ID。