下拉selectedIndexChange事件正在调用单选按钮selectedIndexChange事件。两个控件都在转发器内部

时间:2019-05-29 07:16:39

标签: c# asp.net

在中继器控件中,我有一个单选按钮列表,一个下拉列表和一个文本框。
在单选按钮的selectedIndexChange事件中,我绑定了下拉列表,因为每个单选按钮选项的下拉值都应该不同。

在此之前,我的功能运行正常。现在,我想自动填充基于文本框的值,该值将是下拉菜单的选定文本,但下拉菜单的SelectedIndexChangeEvent则调用Radiobutton的selectedIndexChange事件。

对此有任何帮助吗?

我将Autopostback的下拉列表设置为true。 下拉selectedIndexChange事件正在调用单选按钮selectedindexchange事件。

代码

                                                                                                                                                          
                                                                                                                                                                                                                                                        

/////////////文件后面的代码//////////////

1 个答案:

答案 0 :(得分:0)

Html Part of the code:

<form id="form1" runat="server">
        <div>
            <asp:Repeater ID="Repeater1" runat="server">
                <HeaderTemplate>
                    <table border="1">
                        <tr>
                            <th>Name</th>
                            <th>Country</th>
                            <th>City</th>
                            <th>Comments</th>
                        </tr>
                </HeaderTemplate>
                <ItemTemplate>
                    <tr>
                        <td>
                            <asp:Label ID="lblName" Text='<%# Eval("Name") %>' runat="server" />
                        </td>
                        <td>
                            <asp:RadioButtonList ID="rblCountry" runat="server" AutoPostBack="true" OnSelectedIndexChanged="rblCountry_SelectedIndexChanged">
                                <asp:ListItem Text="United States" Value="US"></asp:ListItem>
                                <asp:ListItem Text="United Kingdom" Value="UK"></asp:ListItem>
                                <asp:ListItem Text="Australia" Value="Aus"></asp:ListItem>
                            </asp:RadioButtonList>
                        </td>
                        <td>
                            <asp:DropDownList ID="ddlCity" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ddlCity_SelectedIndexChanged">
                            </asp:DropDownList>
                        </td>
                        <td>
                            <asp:TextBox ID="txtCity" runat="server"></asp:TextBox>
                        </td>
                    </tr>
                </ItemTemplate>
                <FooterTemplate>
                    </table>
                </FooterTemplate>
            </asp:Repeater>
        </div>
    </form>

   code behind part:
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            PopulateList();
        }
    }

    private void PopulateList()
    {
        DataTable dt = new DataTable();
        dt.Columns.AddRange(new DataColumn[1] { new DataColumn("Name", typeof(string))});
        dt.Rows.Add("John Hammond");
        dt.Rows.Add("Mudassar Khan");
        dt.Rows.Add("Suzanne Mathews");
        dt.Rows.Add("Robert Schidner");
        Repeater1.DataSource = dt;
        Repeater1.DataBind();
    }

    protected void rblCountry_SelectedIndexChanged(object sender, EventArgs e)
    {
        RepeaterItem item = (sender as RadioButtonList).NamingContainer as RepeaterItem;
        string countryName = (item.FindControl("rblCountry") as RadioButtonList).Text;
        DropDownList ddlCity = item.FindControl("ddlCity") as DropDownList;
        TextBox txtCity = item.FindControl("txtCity") as TextBox;
        ListItem li;
        if (ddlCity != null)
        {
            ddlCity.Items.Clear();
            switch (countryName)
            {
                case "US":
                    li = new ListItem() { Text = "Chicago", Value = "Chicago" };
                    ddlCity.Items.Add(li);
                    li = new ListItem() { Text = "Washington", Value = "Washington" };
                    ddlCity.Items.Add(li);
                    break;
                case "UK":
                    li = new ListItem() { Text = "Manchester", Value = "Manchester" };
                    ddlCity.Items.Add(li);
                    li = new ListItem() { Text = "London", Value = "London" };
                    ddlCity.Items.Add(li);
                    li = new ListItem() { Text = "Scotland", Value = "Scotland" };
                    ddlCity.Items.Add(li);
                    break;
                case "Aus":
                    li = new ListItem() { Text = "Sydney", Value = "Sydney" };
                    ddlCity.Items.Add(li);
                    li = new ListItem() { Text = "Melbourne", Value = "Melbourne" };
                    ddlCity.Items.Add(li);
                    break;
            }
            if (ddlCity != null && ddlCity.SelectedItem != null)
                txtCity.Text = ddlCity.SelectedItem.Text;
        }
    }

    protected void ddlCity_SelectedIndexChanged(object sender, EventArgs e)
    {
        RepeaterItem item = (sender as DropDownList).NamingContainer as RepeaterItem;
        DropDownList ddlCity = item.FindControl("ddlCity") as DropDownList;
        TextBox txtCity = item.FindControl("txtCity") as TextBox;
        txtCity.Text = ddlCity.SelectedItem.Text;
    }