2012-12-19 4 views
7

これは私がこのサイトで尋ねる最初の質問であるため、事前に作成したmuckupについて謝ります。可能な限り最高です。コントロールを作成する.Parsecontrol(HTMLString)filter Br要素の代わりにdiv要素によるリテラルコントロール

私が説明するのは少し難しい私の問題を見つけることだが、それはこれに沸く:

私は、WebサービスからXMLファイルを取得しにXSLTを使用して生成されたHTMLの大きな文字列を持っていますそれをHTMLの大きな文字列に変換します。私はそれをControlコレクションに解析し、いくつかのイベントハンドラを追加してHTMLPlaceholderに追加します。そしてすべてがうまくいきます。

しかし、このHTML文字列は私のウェブサイト全体を網羅しており、一度にすべてのマークアップを処理できないハンドターミナルで実行されているため、送信するマークアップをフィルタリングしますが、

Div要素は、私が保持したいDiv要素を失うことなく除外することはできません。これは、Parsecontrolが私のDiv要素を半分にチョップし、それをLiteralcontrolsに変換し、それをbr要素でソートするためです。私のコードを表示

は少し難しいですが、ここでは何が起こるかの例です:

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

      } 

私はLiteralControlの部分を取得するときには、物事がうまくいかないということです。ボタンとテキストフィールドは正常に動作します。しかし、LiteralControlはDiv要素を半分に切り、br要素でフィルタリングされます。私div要素は、(簡略化のために編集)以下のようになります。

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

しかし、私のLiteralControl要素は、以下の(未編集)のようになります。

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

と次:

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

次は:

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

ご覧のとおり、私のLiteralControlsはbr要素に基づいていますが、問題はDiv要素に基づいてフィルタリングしたいということです。しかし、それは汚い、率直に嫌なハッキングに頼らざるを得ないと思われる。

私の質問は、Br要素の代わりにDiv要素に基づいてどのようにフィルタリングしますか?機能を追加するボタンやテキストボックスをフィルタリングすることはできますが、レイアウトとサイトは私のDiv要素に依存しています。

+0

'ctrl.Controls.RemoveAt(i);を呼び出すと、'

' but leaves the contents and the end of the '
'の先頭が削除されていますか? – jmrnet

+0

私が欲しいdiv要素はLiteralControl要素にあることがありますが、問題はそれが子br要素を持ち、Literalcontrolが常に開始して終了する部分です。つまり、私のDiv要素のチョップされたバージョンしか得られません。すべての子ラベル要素は、それらのinf要素の前にbr要素があるため分離されています(上記参照) –

答えて

1

BR要素を次のように閉じてみてください。<br />パーサーが閉じタグなしのBR要素で混乱していると思います。

+0


要素を削除しようとしましたが、代わりに入力時にフィルタリングされました。この問題は具体的には
要素に関連しているようではなく、ParseControlがHTMLをLiteralControlsに変えるという事実 –

関連する問題