2011-02-27 70 views
0

我是ASP.NET新手,我有点迷路,不知道我是否正确。在回发后在代码隐藏中访问生成的htmlControls

在一个非常大的形式中,我使用很多输入字段来渲染几个表格。

在ASPX我有这样的:

<tbody runat="server" id="a2_tbody" ></tbody> 

在代码隐藏我访问TBODY并呈现TR,运输署和投入使用这样的方法:

private void generateA2TableRows(int num_rows, HtmlGenericControl parent) { 

    for(int i=0; i<num_rows; i++){ 
     string ctrlName = String.Empty; 
     TableRow tr = new TableRow(); 

     TableCell c_designacao = new TableCell(); 
     HtmlInputText i_designacao = new HtmlInputText("text"); 
     ctrlName = "a2_designacao_" + i; 
     i_designacao.ID = ctrlName; 
     i_designacao.Name = ctrlName; 
     i_designacao.Attributes.Add("class", "validate[custom[blackList]]"); 
     c_designacao.Controls.Add(i_designacao); 
     tr.Controls.Add(c_designacao); 

     TableCell c_ss = new TableCell(); 
     HtmlSelect seg_social = new HtmlSelect(); 
     ctrlName = "a2_seg_social_" + i; 
     seg_social.Items.Insert(0, "Selecione"); 
     seg_social.SelectedIndex = 0; 
     seg_social.Items.Insert(1,"Sim"); 
     seg_social.Items.Insert(2,"Não"); 
     seg_social.ID = ctrlName; 
     seg_social.Name = ctrlName; 
     c_ss.Controls.Add(seg_social); 
     tr.Controls.Add(c_ss);    

     TableCell c_n_utentes = new TableCell(); 
     HtmlInputText i_n_utentes = new HtmlInputText("text"); 
     i_n_utentes.Attributes.Add("class", "validate[custom[onlyPositiveNumbers]]"); 
     ctrlName = "a2_n_utentes_" + i; 
     i_n_utentes.ID = ctrlName; 
     i_n_utentes.Name = ctrlName; 
     c_n_utentes.Controls.Add(i_n_utentes); 
     tr.Controls.Add(c_n_utentes); 

     parent.Controls.Add(tr); 
    } 

} 

但现在我需要访问所有的输入来验证和其他处理。 我一直在尝试这种方式:

这一个只返回我写在aspx上的htmlControls。

foreach (Control ctrl in Form.Controls) { 
     if (ctrl is HtmlControl) 
     { 
      HtmlControl htmlCtrl = ctrl as HtmlControl; 

      Response.Write("ID: " + htmlCtrl.ID + "    CLASS = " + htmlCtrl.Attributes["class"] +"   type = "+ htmlCtrl.GetType() + "<br/>"); 
     } 
    } 

这样我得到了渲染的元素,但只有名称。 我试着重新构造元素的ID并使用FindControl方法,但“Form”不会以任何方式返回任何元素。

 foreach (Object formObj in Request.Form) { 
     string formObjID = formObj.ToString().Replace("$", "_"); 
     Control ctrl = Form.FindControl(formObjID); 

    } 

任何人都可以从这一个脱下我吗? 主要目标只是访问呈现的元素,以便我可以验证它们并将数据序列化为XML,并且真的不知道这是否是正确的方法。

在此先感谢。

+0

抱歉,但这是真的不是asp.net的正确方法。你可能首先需要一些教程,也许有数以千计的亨德尔。但好吧,为什么你不记得你的输入文本框,例如列表(文本框)或你的列表(HtmlInputText)(我不明白你为什么使用) – Luke 2011-02-27 23:42:17

+0

gridview会做你想要的东西一个更简单的方法 – Luke 2011-02-27 23:43:47

回答

0

嗨这种方法将重新生成每个请求的所有控件,这样你可以访问每个控件。可以在OnInit事件中创建所有控件。