2014-01-10 50 views
0

在我的网站,我可以创建动态使用更新面板控制控件(文本框下拉)。但我无法访问这些控件。即使在调试期间在浏览器中查看源代码时,动态创建的控件也不存在!我想知道我们如何能够看到动态创建的控件,而在o/p的源代码视图中没有定义它们的定义。你能否清楚我的这个疑问。非常感谢。无法访问动态创建的控件

代码:

​​

和相应的代码背后,是

 protected void Page_Load(object sender, EventArgs e) 
    { 
     int intRowCount = Convert.ToInt32(ViewState["No_of_Rows"]); 
     for (int i = 1; i <= intRowCount; i++) 
     { 
      TableRow row = new TableRow(); 
      TableCell cell1 = new TableCell(); 
      TableCell cell2 = new TableCell(); 
      TableCell cell3 = new TableCell(); 
      TableCell cell4 = new TableCell(); 
      TextBox tb = new TextBox(); 
      DropDownList ddl = new DropDownList(); 
      Label lbl1 = new Label(); 
      Label lbl2 = new Label(); 

      row.ID = "rwAssocIncRec" + i; 

      cell1.ID = "cAssocIncRec" + i + "1"; 
      cell2.ID = "cAssocIncRec" + i + "2"; 
      cell3.ID = "cAssocIncRec" + i + "3"; 
      cell4.ID = "cAssocIncRec" + i + "4"; 
      cell2.Attributes.Add("align", "left"); 
      cell4.Attributes.Add("align", "left"); 


      tb.ID = "txtAssocIncRec" + i; 
      tb.MaxLength = 12; 
      tb.EnableViewState = true; 

      lbl1.ID = "lblAssocIncRec" + i + "01"; 
      lbl2.ID = "lblAssocIncRec" + i + "02"; 

      ddl.ID = "ddlbAssocIncRec" + i; 

      cell1.Controls.Add(lbl1); 
      cell2.Controls.Add(tb); 
      cell3.Controls.Add(lbl2); 
      cell4.Controls.Add(ddl); 
      ddl.Items.Add(new ListItem("--Select--", "0")); 
      ddl.Items.Add(new ListItem("1", "1")); 
      ddl.Items.Add(new ListItem("2", "2")); 


      row.Cells.Add(cell1); 
      row.Cells.Add(cell2); 
      row.Cells.Add(cell3); 
      row.Cells.Add(cell4); 

      someTBL.Rows.Add(row); 
     } 

    } 
    protected void btnAddNewRowAssocInc_Click(object sender, EventArgs e) 
    { 

     TableRow newRow = new TableRow(); 
     newRow.ID = "trAssocIncRec" + lblcount.Text; 

     TableCell newCell1 = new TableCell(); 
     newCell1.ID = "tdAssocIncRec1" + lblcount.Text; 
     Label lbl = new Label(); 
     lbl.Text = ""; 
     lbl.ID = "lblAssocIncRec" + lblcount.Text; 
     newCell1.Controls.Add(lbl); 
     newRow.Cells.Add(newCell1); 

     TableCell newCell2 = new TableCell(); 
     newCell2.ID = "tdAssocIncRec2" + lblcount.Text; 
     TextBox txtBox = new TextBox(); 
     txtBox.ID = "txtAssocIncRec" + lblcount.Text; 
     txtBox.MaxLength = 12; 
     newCell2.Attributes.Add("align", "left"); 
     newCell2.Controls.Add(txtBox); 
     newRow.Cells.Add(newCell2); 

     TableCell newCell3 = new TableCell(); 
     newCell3.ID = "tdAssocIncRec3" + lblcount.Text; 
     Label lbl2 = new Label(); 
     lbl2.Text = ""; 
     lbl2.ID = "lblAssocIncRec2" + lblcount.Text; 
     newCell3.Controls.Add(lbl2); 
     newRow.Cells.Add(newCell3); 

     TableCell newCell4 = new TableCell(); 
     newCell4.ID = "tdAssocIncRec4" + lblcount.Text; 
     DropDownList ddlb = new DropDownList(); 
     ddlb.ID = "ddlbAssocIncRec" + lblcount.Text; 
     newCell4.Attributes.Add("align", "left"); 
     newCell4.Controls.Add(ddlb); 
     ddlb.Items.Add(new ListItem("--Select--", "0")); 
     ddlb.Items.Add(new ListItem("1", "1")); 
     ddlb.Items.Add(new ListItem("2", "2")); 
     newRow.Cells.Add(newCell4); 

     someTBL.Rows.Add(newRow); 
     ViewState["No_of_Rows"] = Convert.ToInt32(lblcount.Text); 

     lblcount.Text = Convert.ToString(Convert.ToInt32(lblcount.Text) + 1); 


    } 
+0

看看生命周期:http://msdn.microsoft.com/en-us/library/ms178472.aspx –

回答

0

你需要做的是在任何负载情况下,或在页面的每次初始化事件重新创建这些。这样可以检索值。

然后,我会找到你所创建的控制和他们在一个视图状态添加到列表中(因此它被当用户离开页面毁)

ViewState["DynamicControls"] = list; 

那么你已经存储的值,你可以回来。

+0

嗨菲利普,感谢您的回应。我已经在页面加载事件中重新创建了它们。而且一切工作正常。但我无法访问它们。例如,如果在您的PC上运行代码,然后单击浏览器输出并单击查看源代码,则无法看到动态创建的控件。请你帮忙。 –

+0

您是否在视图状态下创建了它们? –