2012-12-19 9 views
7

Questa è la prima domanda che mi pongo in questo sito, quindi mi scuso per eventuali muckups faccio in anticipo, io provare a fare questa domanda come il migliore possibileFare control.Parsecontrol (HTMLString) filtro LiteralControl da elementi Div invece di elementi Br

sto trovando il mio problema un po 'difficile da spiegare, ma si riduce a questo:

Ho una grande serie di HTML generato recuperando un file XML da un servizio Web e l'utilizzo di XSLT per trasformalo in una grande stringa di HTML. Quindi lo analizzo in una raccolta di controlli, aggiungo alcuni gestori di eventi e lo aggiungo a un HTMLPlaceholder e hooray tutto funziona perfettamente.

Tuttavia, dal momento che questa stringa HTML contiene praticamente tutto il mio sito Web ed è in esecuzione terminali che non possono gestire tutto il markup in una volta, filtro il markup che invio, ma questo presenta un problema.

Div elementi non possono essere filtrati senza perdere l'elemento Div che voglio mantenere. Questo perché Parsecontrol taglia i miei elementi Div a metà e li trasforma in Literalcontrols, che sono ordinati per elementi br.

Mostrando il mio codice è un po 'difficile, ma qui è un esempio di ciò che accade:

//html contains the auto generated HTML 
ctrl = ParseControl (html); 

      for (int i = ctrl.Controls.Count - 1 ; i >= 0 ; --i) 
      { 

       string MenuId = ""; 
       Control theControl = ctrl.Controls[i]; 

       if (theControl is Button) 
       // Code that filters buttons 
       if (theControl is TextBox) 
       // Code that filters textboxes 

       if (theControl is LiteralControl) 
       { 
        LiteralControl literal = theControl as LiteralControl; 

        //This checks if the Div element I'm looking for exists 
        //If it does, I want to keep it 
        bool contains = literal.Text.Contains ("<div id=\"" + ParentDiv); 
        if (contains) 
         MenuId = ParentDiv; 
       } 

       if (MenuId != ParentDiv) 
       { 
        ctrl.Controls.RemoveAt (i); 
       } 

      } 

E' quando arrivo alla parte LiteralControl che le cose vanno male. Pulsanti e campi di testo funzionano correttamente. Tuttavia, il LiteralControl taglia i miei elementi Div a metà e viene filtrato dagli elementi br. I miei div elementi simile al seguente (A cura per brevità):

<div class="hide" id="TB_24000" > 
<br> 
<Textbox elements> 
<Button elements> 
<Label elements> 
<br> 
<Textbox elements> 
<Button elements> 
<Label elements> 
<br> 
<input type="button" id="btnBack" value="Tilbage" class="BackandResetButtons" onclick="backButton(this,document.getElementById('MenuLevel1'),document.getElementById('TB_24000')); return false;"></div> 

Ma i miei elementi LiteralControl simile al seguente (inedito):

<br><input type="button" id="btnBack" value="Tilbage" class="BackandResetButtons" onclick="backButton(this, document.getElementById('TB_33999'),document.getElementById('TB_38400'));&#xA;   "></div> 

E la prossima:

<br><label class="label">FRAGT</label><br> 

e la prossima:

<br><label class="label">SPEDITØR</label><br> 

Come si può vedere, le mie LiteralControls si basano su br elementi, ma il problema è che io voglio filtrare in base a Div elementi. Tuttavia, non sembra possibile senza ricorrere a hack sporchi e francamente indesiderati.

Quindi la mia domanda è: come faccio a filtrare in base agli elementi Div anziché a Br elementi? Posso filtrare pulsanti e caselle di testo che aggiungono funzionalità alla perfezione, ma il mio layout e il mio sito dipendono dai miei elementi Div.

+0

Sta dicendo che quando si chiama 'ctrl.Controls.RemoveAt (i);' è la rimozione l'inizio del ''

' but leaves the contents and the end of the '
? – jmrnet

+0

Gli elementi div che voglio sono a volte nell'elemento LiteralControl, il problema è tuttavia che ha elementi figlio secondari, ed è qui che inizia e termina sempre il Literalcontrol, il che significa in realtà che ottengo solo una versione tagliata dei miei elementi Div, e tutti gli elementi dell'etichetta figlio sono separati perché hanno un elemento br di fronte a loro (vedi sopra) –

risposta

1

Provare a chiudere gli elementi BR in questo modo: <br /> Penso che il parser venga confuso dall'elemento BR senza tag di chiusura.

+0

Ho provato a eliminare gli elementi
e ora invece filtra in input. Questo problema non sembra essere specificamente correlato agli elementi
, ma piuttosto al fatto che ParseControl converta l'HTML in LiteralControls in modo abbastanza arbitrario –