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'));
 "></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
.
Sta dicendo che quando si chiama 'ctrl.Controls.RemoveAt (i);' è la rimozione l'inizio del ''
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) –