2012-12-19 3 views
7

Dies ist die erste Frage, die ich auf dieser Seite stelle, also entschuldige ich mich für irgendwelche Muckups, die ich im Voraus mache, werde ich jedoch versuchen, diese Frage zu stellen so gut wie möglich.Making control.Parsecontrol (HTMLString) Filter Literalcontrol by Div Elemente statt Br Elemente

Ich finde mein Problem ein wenig schwierig zu erklären, aber es läuft darauf hinaus, diese nach unten:

Ich habe eine große Reihe von HTML, die durch Abrufen eine XML-Datei von einem Web-Service und mit XSLT erzeugt wird wandeln Sie es in eine große HTML-Kette um. Ich parse es dann in eine Control-Sammlung, füge einige Event-Handler hinzu und füge es einem HTMLPlaceholder hinzu und hurra alles funktioniert gut.

Da dieser HTML-String jedoch ziemlich meine gesamte Website enthält und auf Handterminals ausgeführt wird, die nicht alle Markups gleichzeitig verarbeiten können, filtere ich das von mir gesendete Markup, aber das stellt ein Problem dar.

Div Elemente können nicht herausgefiltert werden, ohne das Div Element zu verlieren, das ich behalten möchte. Das liegt daran, dass Parsecontrol meine Div Elemente halbiert und sie in Literalcontrols umwandelt, die nach br Elementen sortiert sind.

meinen Code zu zeigen, ist ein wenig hart, aber hier ist ein Beispiel dafür, was passiert:

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

      } 

Es ist, wenn ich zum LiteralControl Teil bekommen, dass etwas schief geht. Schaltflächen und Textfelder funktionieren einwandfrei. Das LiteralControl schneidet jedoch meine Div-Elemente in zwei Hälften und wird durch br Elemente gefiltert. Meine div Elemente aussehen wie die folgende (Edited der Kürze halber):

<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> 

Aber meine LiteralControl Elemente wie folgt aussehen (ungeschnitten):

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

Und die nächste:

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

Und das nächste:

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

Wie Sie sehen können, basieren meine LiteralControls auf br Elementen, aber das Problem ist, dass ich basierend auf Div Elemente filtern möchte. Es scheint jedoch nicht möglich zu sein, ohne auf schmutzige und offensichtliche unerwünschte Hacks zurückzugreifen.

Also meine Frage ist: Wie filtere ich basierend auf Div Elemente anstelle von Elemente? Ich kann Schaltflächen und Textfelder filtern, die Funktionalität hinzufügen, aber mein Layout und meine Site hängen davon ab, dass meine Div Elemente dort sind.

+0

Sie sagen, dass, wenn Sie 'ctrl.Controls.RemoveAt (i);' aufrufen, es den Anfang des '

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

+0

Die div-Elemente, die ich will, sind manchmal im LiteralControl-Element, das Problem ist jedoch, dass es Kind br Elemente hat, und das ist, wo die Literalcontrol immer beginnt und endet, was effektiv bedeutet, dass ich nur eine gehackte Version meiner Div-Elemente bekomme, und alle untergeordneten Label-Elemente sind getrennt, weil sie ein Br-Element vor ihnen haben (siehe oben). –

Antwort

1

Versuchen Sie, Ihre BR Elemente wie folgt zu schließen: <br /> Ich denke, dass der Parser durch das BR Element ohne abschließende Tag verwirrt wird.

+0

Ich habe versucht, die
Elemente zu löschen und jetzt filtert es stattdessen auf Eingabe. Dieses Problem scheint nicht speziell auf
Elemente bezogen zu sein, sondern die Tatsache, dass ParseControl den HTML-Code recht willkürlich in LiteralControls umwandelt –