首页 文章

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

提问于
浏览
1

转发器内的下方控件放置在更新面板中 . 第一个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

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

    • 在转发器的ItemDatabound事件(或其他事件之一)中使用FindControl()方法 .

    • 在SelectedIndexChanged()事件中 . sender参数可以是DropDownList的大小写 .

    从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 .

相关问题