2009-12-23 5 views
1

다양한 조건과 일치하는 입력을 찾고자하는 HTML이 상당히 복잡합니다. 나는의 라인을 따라 뭔가 사용하기 바란다 : 그러나HtmlGenericControl을 드롭 다운으로 캐스팅

private void setup() 
{ 
    masterContainer.InnerHtml = @" 
    <div>crazy 
     <div>unknown 
      <div>html layout 
       <select id='crazySelectIdentifier_id1' runat='server'> 
        <option value='1'>Item1</option> 
        <option value='2'>Item2</option> 
       </select> 
      </div> 
     </div> 
    </div> 
    <div> 
     <div> 
      <select id='crazySelectIdentifier_id2' runat='server'> 
       <option value='1'>Item1</option> 
       <option value='2'>Item2</option> 
      </select> 
     </div> 
    </div> 
    <div> 
    </div>"; 
} 

private void recursiveTrawl(HtmlGenericControl currentOuterControl) 
{        
    for (int i = 0; i < currentOuterControl.Controls.Count; i++) 
    { 
     HtmlGenericControl currentControl = (HtmlGenericControl) currentOuterControl.Controls[i]; 
     if(currentControl.HasControls()) 
     { 
      recursiveTrawl(currentControl); 
     } 
     else 
     { 
      String[] controlArr = currentControl.ID.ToString().Split('_'); 
      String currentId = controlArr[1]; 

      if (currentId.Equals("somethingspecific")) 
      { 
        //THE PROBLEM IS HERE 
        DropDownList dropdown = (DropDownList)currentControl; 

를, 내가 얻을 System.Web.UI.WebControls.DropDownList '에 유형'System.Web.UI.HtmlControls.HtmlGenericControl을 '변환 할 수 없습니다 에러 - '

비슷한 오류로 HtmlSelect를 사용해 보았습니다. 관심있는 드롭 다운 목록에서 선택한 값에 액세스 할 수있는 방법을 알아야합니다.

감사합니다.

+0

원시 HTML을 asp.net 컨트롤로 변환하려고하십니까? "트롤"이란 무엇입니까? 페이지가 코드를 실행하고 있습니까? 아니면 정적으로 구문 분석하고 있습니까? – womp

+0

나는 그들이 "크롤링"또는 구문 분석을한다고 생각한다 – GrayWizardx

+0

당신이 이것을하는 컨텍스트는 무엇인가? ASP.NET에 있습니까? 아니면 다른 상황에서입니까? – GrayWizardx

답변

1

이 시도 :

WebForm의

<asp:PlaceHolder ID="PlaceHolder1" runat="server" /> 

확장 메서드

public static class ControlExtensions 
{ 

    public static void FindControlByType<TControl>(this Control container, ref List<TControl> controls) where TControl : Control 
    { 
     if (container == null) 
      throw new ArgumentNullException("container"); 

     if (controls == null) 
      throw new ArgumentNullException("controls"); 

     foreach (Control ctl in container.Controls) 
     { 
      if (ctl is TControl) 
       controls.Add((TControl)ctl); 

      ctl.FindControlByType<TControl>(ref controls); 
     } 
    } 

} 

코드

string html = @"<div> 
        <select id='Sel1' runat='server'> 
         <option value='1'>Item1</option> 
         <option value='2'>Item2</option> 
         <option value='3'>Item3</option> 
        </select> 
       </div> 
       <div> 
        <select id='Sel2' runat='server'> 
         <option value='4'>Item4</option> 
         <option value='5'>Item5</option> 
         <option value='6'>Item6</option> 
        </select> 
       </div>"; 

Control ctl = TemplateControl.ParseControl(html); 
PlaceHolder1.Controls.Add(ctl); 

List<HtmlSelect> controls = new List<HtmlSelect>(); 
PlaceHolder1.FindControlByType<HtmlSelect>(ref controls); 

foreach (HtmlSelect select in controls) 
{ 
} 
+0

아니요, 저는 DropDown을 생성하고 싶지 않습니다. 이미 생성되었고 페이지에 있습니다. 그리고 그것을 찾을 수 있습니다. 그러나 그것을 찾을 때 HtmlGenericControl입니다. DropDownList 또는 HtmlSelect와 같은 유용한 것으로 변환 할 수 있어야합니다. – wkstar

+0

어떻게 DropDownList를 만들었습니까 (runat = "server"또는 ASP.NET DropDownList 또는 자동 생성 태그로 표시된 간단한