2013-02-11 11 views
6

मैं एक सर्वेक्षण साइट बना रहा हूँ। मैं टेक्स्टबॉक्स को गतिशील रूप से जोड़ना चाहता हूं और फिर डेटाबेस में अपने मान प्राप्त करना चाहता हूं।ASP.NET का उपयोग करके टेक्स्टबॉक्स को गतिशील रूप से कैसे बनाएं और फिर डेटाबेस में अपने मानों को सहेजें?

अब मान लें कि मैं ड्रॉपडाउन से 4 टेक्स्टबॉक्स को गतिशील रूप से चुनने के लिए चुनता हूं।

कोड लटकती पर चयन पर:

 protected void NumDropDown_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     if (DropDownList1.SelectedValue == "TextBox") 
     { 

      int j; 
      i = int.Parse(NumDropDown.SelectedValue); 
      Session["i"] = i; 
      switch (i) 
      { 
       case 1: 
        t = new TextBox[i]; 
        Session["textBox"] = t; 
        for (j = 0; j < i; j++) 
        { 
         t[j] = new TextBox(); 
         t[j].ID = "txtCheckbox" + j.ToString(); 
         Panel1.Controls.Add(t[j]); 

        } 
        break; 
       case 2: 
        t = new TextBox[i]; 
        Session["textBox"] = t; 
        for (j = 0; j < i; j++) 
        { 
         t[j] = new TextBox(); 
         t[j].ID = "txtCheckbox" + j.ToString(); 
         Panel1.Controls.Add(t[j]); 

        } 
        break; 

       case 3: 
        t = new TextBox[i]; 
        Session["textBox"] = t; 
        for (j = 0; j < i; j++) 
        { 
         t[j] = new TextBox(); 
         t[j].ID = "txtCheckbox" + j.ToString(); 
         Panel1.Controls.Add(t[j]); 

        } 
        break; 
       case 4: 
        t = new TextBox[i]; 
        List<TextBox> MyTextBoxes; 
        for (j = 0; j < i; j++) 
        { 
         t[j] = new TextBox(); 
         t[j].ID = "txtCheckbox" + j.ToString(); 
         Panel1.Controls.Add(t[j]); 
         try 
         { 
          MyTextBoxes = (List<TextBox>)Session["AddedTextBox"]; 
          MyTextBoxes.Add(t[j]); 
          Session["AddedTextBox"] = MyTextBoxes; 
         } 
         catch 
         { 
          MyTextBoxes = new List<TextBox>(); 
          MyTextBoxes.Add(t[j]); 
          Session["AddedTextBox"] = MyTextBoxes; 
         } 
        } 
        break; 
      } 

     } 
    } 

2) तो यहाँ मैं की तरह एक, ख, ग, घ पाठ बॉक्स में मूल्यों में प्रवेश किया और जोड़ें पर क्लिक करें:

कोड के लिए क्लिक जोड़ें पर क्लिक करें:

1) सबसे पहले मैं सत्र Page_Init पर वहां होना जाँच:

protected void Page_Init(object sender, EventArgs e) 
    { 
     if (Session["AddedTextBox"] != null) 
     { 
      string a; 
      string b; 
      string c; 
      string d; 

      int listCount = ((List<TextBox>)Session["AddedTextBox"]).Count; 
      foreach (TextBox t in ((List<TextBox>)Session["AddedTextBox"])) 
      { 
       if (listCount == 1) 
       { 

       } 
       if (listCount == 2) 
       { 

       } 
       if (listCount == 3) 
       { 

       } 
       if (listCount == 4) 
       { 
        if (t.ID == "txtCheckbox0") 
        { 
         a = t.Text; 
        } 
        if (t.ID == "txtCheckbox0") 
        { 
         b = t.Text; 
        } 
        if (t.ID == "txtCheckbox0") 
        { 
         c = t.Text; 
        } 
        if (t.ID == "txtCheckbox0") 
        { 
         d = t.Text; 
        } 

       } 
      } 
     } 

लेकिन यहां समस्या यह है कि मुझे टेक्स्ट मान नहीं मिलते हैं, वे खाली होने लगते हैं। कृपया इस समस्या को हल करने में मेरी मदद करें।

+0

आप दृष्टिकोण का उल्लेख यहाँ से लाभ हो सकता: [वहाँ एक textboxlist नियंत्रण उपलब्ध कहीं है?] (http://stackoverflow.com/questions/9070327/is-there-a -textboxlist नियंत्रण से उपलब्ध कहीं-) – MikeM

उत्तर

3

यह उम्र के पुराने क्लासिक समस्या की तरह लगता है जैसे एएसपीनेट एक पृष्ठ पर गतिशील रूप से नियंत्रण जोड़ता है।

समस्या पोस्टबैक पर नियंत्रणों के पुनर्स्थापन और पुनर्निर्माण के साथ समस्या है।

आप एक ही कोड उस पृष्ठ जीवन चक्र में सही समय पोस्टबैक मूल्यों मैच सर्वर साइड नियंत्रण सुनिश्चित करने के लिए पर पोस्टबैक पर नियंत्रण उत्पन्न चलाने की जरूरत है।

बेशक

यदि आप एक hacky शॉर्टकट चाहते हैं, Request.Form["textCheckbox" + index] मानों तक पहुंच सीधे

A useful article on the subject.

1

के रूप में @ जेनसन बटन घटना आप Request.Form यहाँ के माध्यम से TextBox मूल्यों का उपयोग कर सकते उल्लेख एक उदाहरण है:

ASPX:

<asp:DropDownList ID="ddlTextBoxes" runat="server"> 
    <asp:ListItem Value="1" Text="1" /> 
    <asp:ListItem Value="5" Text="5" /> 
</asp:DropDownList> 
<asp:Button ID="btnAdd" runat="server" Text="Add" OnClick="Add" /><br /> 
<asp:PlaceHolder ID="container" runat="server" Visible="false"> 
    <asp:Button ID="btnSubmit" runat="server" Text="Submit" OnClick="Submit" /> 
</asp:PlaceHolder> 
पीछे

कोड:

protected void Add(object sender, EventArgs e) 
    { 
     int numOfTxt = Convert.ToInt32(ddlTextBoxes.SelectedItem.Value); 
     var table = new Table(); 

     for (int i = 0; i < numOfTxt; i++) 
     { 
      var row = new TableRow(); 
      var cell = new TableCell(); 

      TextBox textbox = new TextBox(); 
      textbox.ID = "Textbox" + i; 
      textbox.Width = new Unit(180); 

      cell.Controls.Add(textbox); 
      row.Cells.Add(cell); 
      table.Rows.Add(row); 
     } 

     container.Controls.AddAt(0,table); 
     container.Visible = true; 
    } 

    protected void Submit(object sender, EventArgs e) 
    { 
     var textboxValues = new List<string>(); 
     if (Request.Form.HasKeys()) 
     { 
      Request.Form.AllKeys.Where(i => i.Contains("Textbox")).ToList().ForEach(i => 
       { 
        textboxValues.Add(Request.Form[i]); 
       }); 
     } 

     //Do something with the textbox values 
     textboxValues.ForEach(i => Response.Write(i + "<br />")); 
     container.Visible = false; 
    }