2012-03-02 14 views
1

私はサーバー側のコントロール(CheckBoxListの& Button)を追加したい(つまり、イベントハンドラをクリックしてください):たHtmlTextWriterコントロールが標準機能を失うことになり使用して、サーバー側のコントロールをレンダリング

コードビハインドてChkBoxLst1 & ChkBoxLst2 & Button1HTMLTextWriterを使用してコントロールをレンダリングします。

私はこれを行うことができないようです。

上記はVisual WebPartのすべてです。
グローバル:

CheckBoxList ChkBoxLst2 = new CheckBoxList(); 
Button Bttn2 = new Button(); 
Label lbl2 = new Label(); 

StringWriter stringWriter = new StringWriter(); 

ページの読み込み:

using (HtmlTextWriter writer = new HtmlTextWriter(stringWriter)) 
     { 
      ChkBoxLst2.Items.Add(new ListItem("Three", "3")); 
      ChkBoxLst2.Items.Add(new ListItem("Four", "4")); 

      ChkBoxLst2.RenderControl(writer); 
      lbl2.RenderControl(writer); 
      Bttn2.Click += new EventHandler(this.Bttn2_Click); 
      Bttn2.Text = "Click this HTMLText WriteButton!"; 
      Bttn2.RenderControl(writer); 

     } 

     spn.InnerHtml = stringWriter.ToString(); 

イベントハンドラ:

void Bttn2_Click(Object sender, EventArgs e) 
    { 
     foreach (ListItem item in ChkBoxLst2.Items) 
     { 
      if (item.Selected == true) 
      { 
       if (IsPostBack) 
       { 
        lbl.Text += item.Text + ", "; 
       } 
      } 
     } 
    } 

EventHandlerはtriggeを得ることはありませんが、私が試してみました何

赤で、選択した値は上のように保存されません。なぜそうではないかについての任意のアイデア?私は2つのチェックボックスリストを比較しようとしましたが、HTMLTextWriterの実装はうまくいきませんでしたが、単純な.NETは同じことをしました。
私はHTMLTextWriterの実装をどう思いますか/

spnは、マークアップ内のリテラルスパンコントロールです。

+0

あなたが試したこととあなたが持っていた問題を教えてもらえますか? –

+0

@JohnSaunders ok質問を編集します – anpatel

答えて

2

あなたがブラウザにこれらのコントロールをレンダリングしているが、コントロールがページのコントロールツリーの一部ではない、とさえ存在しません。ポストバックで。動的に追加されたコントロールは、すべてのリクエストに追加する必要があります。

なぜHtmlTextWriterを使うのですか? Page_Loadの間にコントロールをページに追加するだけで、レンダリングされます。 「if(!Page.IsPostBack)」の外部にあります。ページが読み込まれるたびに、そのページが表示されます。これは必要なものです。

+0

ありがとうございます!その行動は今よりずっと意味をなさない。 – anpatel

4

HTML文字列にコントロールをレンダリングするためにこの方法を試してみてください。

public static string ControlRenderToString(Control tmpControl) 
    { 
     string Content; 

     System.IO.StringWriter sWriter = new System.IO.StringWriter(); 
     HtmlTextWriter htwObject = new HtmlTextWriter(sWriter); 
     tmpControl.RenderControl(htwObject); 

     Content = sWriter.ToString(); 
     sWriter.Close(); 

     return Content; 
    } 
+0

私はそれが私のものだと思っていますが、多分私が何かを見落としているかどうかはわかりません。私はいくつかのコードと詳細で質問を編集しました。 – anpatel

+0

@MyName、私はあなたがコントロールをレンダリングした後にクリックハンドラを使用できるとは思わない、代わりにjavascript/ajaxを使ってみてください。 –

+0

コントロールをレンダリングする前にClickハンドラを呼び出すか、別のシーケンスで実行されますか? – anpatel

関連する問題