У меня есть 2 Dropdownlists с 7 текстовыми полями в одной строке в панели обновления AJAX; мне нужно создать новую строку элементов управления каждый раз, когда я выбираю элемент во втором раскрывающемся списке; и добавьте тот же обработчик событий в новый созданный второй раскрывающийся список ..etc.Как добавить обработчик события для управления внутри одного обработчика событий?
проблема не в первой строке ddl, потому что ее в HTML; но когда я выбираю новый элемент в созданной новой строке ddl, onSelectedIndexChanged не срабатывает, а вторая строка исчезает !!
Любые предложения?
Мой HTML код:
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:DropDownList runat="server" ID="DropDownList1" CssClass="dropdownlist" EnableViewState="true">
<asp:ListItem>a</asp:ListItem>
<asp:ListItem>b</asp:ListItem>
</asp:DropDownList>
                                        
<asp:DropDownList runat="server" ID="DropDownList2" CssClass="dropdownlist" AutoPostBack="true" OnSelectedIndexChanged="DropDownList2_SelectedIndexChanged" EnableViewState="true">
<asp:ListItem>a</asp:ListItem>
<asp:ListItem>b</asp:ListItem>
</asp:DropDownList>
                                 
<asp:TextBox runat="server" ID="textbox1" CssClass="txtbx"></asp:TextBox>
    
<asp:TextBox runat="server" ID="textbox2" CssClass="txtbx"></asp:TextBox>
    
<asp:TextBox runat="server" ID="textbox3" CssClass="txtbx"></asp:TextBox>
    
<asp:TextBox runat="server" ID="textbox4" CssClass="txtbx"></asp:TextBox>
    
<asp:TextBox runat="server" ID="textbox5" CssClass="txtbx"></asp:TextBox>
    
<asp:TextBox runat="server" ID="textbox6" CssClass="txtbx"></asp:TextBox>
   
<asp:TextBox runat="server" ID="textbox7" CssClass="txtbx"></asp:TextBox>
<br />
<br />
</ContentTemplate>
</asp:UpdatePanel>
код позади:
public partial class WebForm1 : System.Web.UI.Page
{
DropDownList ddl1;
DropDownList ddl2;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Session["ddlcounter"] = 1;
}
}
protected void DropDownList2_SelectedIndexChanged(object sender, EventArgs e)
{
ddl1 = new DropDownList();
ddl1.ID = "ddl1_" + (int)Session["ddlcounter"];
ddl1.Width = 200;
ddl1.Height = 30;
ddl1.Items.Add("a");
ddl1.Items.Add("b");
UpdatePanel1.ContentTemplateContainer.Controls.Add(ddl1);
UpdatePanel1.ContentTemplateContainer.Controls.Add(new LiteralControl("                                          "));
ddl2 = new DropDownList();
ddl2.ID = "ddl2_" + (int)Session["ddlcounter"];
ddl2.Width = 200;
ddl2.Height = 30;
ddl2.Items.Add("a");
ddl2.Items.Add("b");
ddl2.AutoPostBack = true;
UpdatePanel1.ContentTemplateContainer.Controls.Add(ddl2);
UpdatePanel1.ContentTemplateContainer.Controls.Add(new LiteralControl("                                      "));
ddl2.SelectedIndexChanged += new EventHandler(DropDownList2_SelectedIndexChanged);
Session["txtcounter"] = 1;
for (int i = 0; i < 7; i++)
{
TextBox txt = new TextBox();
txt.Width = 45;
txt.Height = 25;
UpdatePanel1.ContentTemplateContainer.Controls.Add(txt);
UpdatePanel1.ContentTemplateContainer.Controls.Add(new LiteralControl("     "));
Session["txtcounter"] = (int)Session["txtcounter"] + 1;
}
UpdatePanel1.ContentTemplateContainer.Controls.Add(new LiteralControl("<br /><br />"));
Session["ddlcounter"] = (int)Session["ddlcounter"] + 1;
}
}
поблагодарить u @Rafi, если я воссоздаю элементы управления при каждой обратной передаче; я теряю значения, так, есть ли способ создать повторяющиеся элементы управления на стороне клиента? Стоит ли использовать JS ?? –
Я создал динамические наборы элементов управления с помощью Javascipt и JQuery, поэтому на мой взгляд это достойный вариант. Тем не менее, это не разрешает проблему post-backs, если вы делаете это на веб-странице. – Rafi