datalistCity に 2 つの dropdownCountry を含むデータリストと、dropdownCountry と datalistCity を動的に追加するボタンがあります。
aspx コード
<asp:DropDownList ID="DDSubOffCity" OnSelectedIndexChanged='GetSelectedCityValue' AutoPostBack="false" runat="server" Width="355px"> <asp:ListItem Value="0">Select</asp:ListItem> </asp:DropDownList>
<asp:DropDownList ID="DDSubOffCountry" runat="server" OnSelectedIndexChanged='GetSelectedCountryValue' AutoPostBack="true" Width="355px"> <asp:ListItem Value="0">Select</asp:ListItem> </asp:DropDownList>
コード ビハインド データリスト アイテムバウンド
DDSubOffCountry.Attributes.Add("onChange", "javascript:NewBufferDDCountryValue('" + DDSubOffCountry.ClientID + "','" + DDSubOffCountry.SelectedValue + "');");
DDSubOffCity.Attributes.Add("onChange", "javascript:NewBufferDDCityValue('" + DDSubOffCity.ClientID + "', '" + DDSubOffCity.SelectedValue + "');");}
JavaScript コード
function NewBufferDDCountryValue(objddCountry)
{
try {
if (objddCountry != 'null') {
var ctlDDl = objddCountry.toString();
var parts = ctlDDl.split('_', 4);
var indexId = parts[3];
var objHidden = document.getElementById('ContentPlaceHolder1_DataListOffices_hiddenDDSubOffCountry_' + indexId);
objHidden.value = document.getElementById(objddCountry).value;
}
} catch (e) { alert(e); }
}
function NewBufferDDCityValue(objddCity)
{
try {
if (objddCity != 'null') {
var ctlDDl = objddCity.toString();
var parts = ctlDDl.split('_', 4);
var indexId = parts[3];
var objHidden = document.getElementById('ContentPlaceHolder1_DataListOffices_hiddenDDSubOffCity_' + indexId);
objHidden.value = document.getElementById(objddCity).value;
}
} catch (e) { alert(e); }
}
onselectedindexchange イベントが発生したときにコード ビハインドで呼び出される関数
public void GetSelectedCountryValue(object sender, EventArgs e)
{
DropDownList drp = (DropDownList)sender;
ScriptManager.RegisterClientScriptBlock(this, this.GetType(), " ", "javascript:NewBufferDDCountryValue('" + drp.ClientID + "');", true);
var city = new City();
string indexer = drp.ClientID;
indexer=indexer.Split(Convert.ToChar("_"))[3];
string senderCity ="ContentPlaceHolder1_DataListOffices_DDSubOffCity_" + indexer;
DropDownList drpCity;
/*****************/
クライアント ID のみが既知の場合にコントロールを見つける方法。または、文字列を dropdownCity にキャストして入力する方法 drpCity = FindControl(senderCity);
/********************/
city.populateCity(drpCity, drp.SelectedValue);
}
GetSelectedCountryValue 関数では、dropdownCountry のインデックスを持っていることがわかります。現在、コントロールの名前を知っていますが、ClientId だけでそのコントロールを見つける方法を理解できませんでした。