2016-07-10 2 views
0

У меня есть 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> 
 
          &nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp 
 
         <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> 
 
          &nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp 
 
         <asp:TextBox runat="server" ID="textbox1" CssClass="txtbx"></asp:TextBox> 
 
          &nbsp&nbsp&nbsp&nbsp 
 
         <asp:TextBox runat="server" ID="textbox2" CssClass="txtbx"></asp:TextBox> 
 
          &nbsp&nbsp&nbsp&nbsp 
 
         <asp:TextBox runat="server" ID="textbox3" CssClass="txtbx"></asp:TextBox> 
 
          &nbsp&nbsp&nbsp&nbsp 
 
         <asp:TextBox runat="server" ID="textbox4" CssClass="txtbx"></asp:TextBox> 
 
          &nbsp&nbsp&nbsp&nbsp 
 
         <asp:TextBox runat="server" ID="textbox5" CssClass="txtbx"></asp:TextBox> 
 
          &nbsp&nbsp&nbsp&nbsp 
 
         <asp:TextBox runat="server" ID="textbox6" CssClass="txtbx"></asp:TextBox> 
 
          &nbsp&nbsp&nbsp 
 
         <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("&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp")); 

     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("&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp")); 

     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("&nbsp&nbsp&nbsp&nbsp&nbsp")); 
      Session["txtcounter"] = (int)Session["txtcounter"] + 1; 
     } 
     UpdatePanel1.ContentTemplateContainer.Controls.Add(new LiteralControl("<br /><br />")); 
     Session["ddlcounter"] = (int)Session["ddlcounter"] + 1; 
    } 
} 

ответ

0

Я считаю, что проблема в том, что, когда второй динамически генерируемые DDL postsback, там это не способ запомнить какими были динамически обработанные элементы управления на предыдущем шаге.

Предлагаю вам пройти this article; Я думаю, вы пропустите последний шаг, то есть функцию RecreateControls в вышеупомянутой ссылке.

Надеюсь, что это поможет.

+0

поблагодарить u @Rafi, если я воссоздаю элементы управления при каждой обратной передаче; я теряю значения, так, есть ли способ создать повторяющиеся элементы управления на стороне клиента? Стоит ли использовать JS ?? –

+0

Я создал динамические наборы элементов управления с помощью Javascipt и JQuery, поэтому на мой взгляд это достойный вариант. Тем не менее, это не разрешает проблему post-backs, если вы делаете это на веб-странице. – Rafi

 Смежные вопросы

  • Нет связанных вопросов^_^