2009-12-23 7 views
1

J'ai un ensemble assez compliqué de HTML que je veux traquer à la recherche d'entrées qui correspondent à divers critères. J'espère utiliser quelque chose le long des lignes de:Diffuser un HtmlGenericControl en tant que DropDown

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; 

Cependant, je reçois le ERROR- Impossible de convertir le type « System.Web.UI.HtmlControls.HtmlGenericControl » à « System.Web.UI.WebControls.DropDownList '

J'ai également essayé d'utiliser HtmlSelect avec une erreur similaire. J'ai juste besoin de savoir comment je peux avoir accès aux valeurs sélectionnées dans les listes déroulantes qui m'intéressent.

Merci d'avance.

+0

Essayez-vous de convertir le HTML brut en contrôles asp.net? Que voulez-vous dire "chalut"? La page exécute-t-elle le code ou l'analyse-t-elle statiquement? – womp

+0

Je pense qu'ils voulaient dire "crawl" ou analyser – GrayWizardx

+0

Quel est le contexte dans lequel vous faites cela? Est-ce dans ASP.NET ou est-ce dans un autre contexte? – GrayWizardx

Répondre

1

Essayez ceci:

WebForm

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

Méthode d'extension

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); 
     } 
    } 

} 

code

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

Non, je ne souhaite pas générer le DropDown. C'est déjà généré et sur la page. Et je peux le localiser. Mais quand je le trouve, c'est un HtmlGenericControl. Je dois être capable de le convertir en quelque chose d'utile comme un DropDownList ou un HtmlSelect. – wkstar

+0

Comment avez-vous créé le DropDownList (avez-vous déjà placé une simple balise