2011-02-27 30 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事件中創建所有控件。