2014-01-29 36 views
1

中继器内的下面的控件被放置在更新面板中。第一个ddl有国家,它的“selectedindexchanged”填补了第二个ddl,这是城市。填好文本框并选择国家和城市后,点击添加按钮,所有控件的值保存在中继器中。DropdownList SelectedIndexChanged不在中继器内被触发在UpdatePanel中

enter image description here

当你添加一些,总是最后一个的ddlCountry打响ddl_SelectedIndexChanged()。如果您尝试更改前一个的ddlCountry值,则不会执行.cs文件中的ddl_SelectedIndexChanged()。我查了一下网页的源文件:最后ddlCountry的ID是

cphContent_ddlAddressCountry

和前一个的ID被分配了类似的某物:

cphContent_rpAddress_lblCountrym_0

cphContent指的UpdatePanel并且rp对Repeater有效。

我不知道如何捕捉中继器内的ddl的Id。

回答

0

接住一个中继器内的控制是可能在几个方面:

  1. 使用ItemDataBound事件内的FindControl()方法(或其他事件中的一个)的中继器的。
  2. SelectedIndexChanged()事件中。 sender参数可以是DropDownList的大小写。从得到的城市DDL中的SelectedIndexChanged()事件中的

代码示例:

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

相关问题