2014-01-29 38 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上。

相關問題