2011-02-27 2 views
0

저는 ASP.NET에서 새로운 기능을 가지고 있으며, 나는 길을 잃어 버렸고 올바른 접근 방법을 모르고 있습니다.포스트 백 이후에 codebehind에서 생성 된 htmlControls에 액세스하십시오.

매우 큰 형태로, 나는 입력 필드가 많은 테이블을 렌더링 중입니다. 나는 TBODY에 액세스하고, TD의 및 입력이 같은 방법과 TR 렌더링 코드 숨김에서

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

:

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로 serialize하는 것이고 이것이 올바른 접근 방식인지 여부를 실제로 알지 못합니다.

미리 감사드립니다.

+0

미안하지만 이것은 실제로 asp.net에 대한 올바른 접근법이 아닙니다. 먼저 튜토리얼을 듣고 싶을 수도 있습니다. 하지만 ok, 왜 당신이 입력 textfields 예를 들어 List (텍스트 상자) 또는 List (HtmlInputText) (내가 왜 사용하지 않는지 이해할 수 없음) – Luke

+0

gridview 원하는대로 할 것이라고 기억하지 훨씬 쉬운 방법 – Luke

답변

0

안녕하세요 접근 방식은 각 컨트롤에 액세스 할 수있는 방식으로 각 요청에 대한 모든 컨트롤을 다시 생성하는 것입니다. OnInit 이벤트에서 모든 컨트롤을 만들 수 있습니다.

관련 문제