【问题标题】:DropdownList SelectedIndexChanged Not Fired Inside a Repeater In an UpdatePanelDropdownList SelectedIndexChanged 未在 UpdatePanel 中的中继器内触发
【发布时间】:2014-01-29 10:48:48
【问题描述】:

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

当您添加更多时,总是最后一个的 ddlCountry 触发 ddl_SelectedIndexChanged()。如果您尝试更改前一个的 ddlCountry 值,则不会执行 .cs 文件中的 ddl_SelectedIndexChanged()。我查看了页面来源:final ddlCountry's Id is

cphContent_ddlAddressCountry

并且前一个的ID被分配了这样的东西:

cphContent_rpAddress_lblCountrym_0

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

我不知道如何在中继器中捕获 ddl 的 ID。

【问题讨论】:

    标签: asp.net ajax updatepanel repeater


    【解决方案1】:

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

    1. 在中继器的 ItemDatabound 事件(或其他事件之一)中使用 FindControl() 方法。
    2. 在 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/ 进行比较两者都附加到控件 ID 的 controlstate 值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-22
      相关资源
      最近更新 更多