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'));
 "></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.
Sie sagen, dass, wenn Sie 'ctrl.Controls.RemoveAt (i);' aufrufen, es den Anfang des '
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). –