1

CheckBoxListサーバーサイドコントロール( s& )を追加したいButton

ChkBoxLst1&&コードビハインドを使用してから、を使用してコントロールをレンダリングしますChkBoxLst2Button1HTMLTextWriter

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

上記のすべてがビジュアルWebパーツに含まれています。

私が試したこと:
グローバル:

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はトリガーされず、選択した値は上記のように保存されません。なぜそうではないかについてのアイデアはありますか?2つのチェックボックスリストを比較してみましたが、HTMLTextWriter実装は機能しませんでしたが、単純な.NETは
すべて同じことを実行しましたが、HTMLTextWriterの実装/サーバーコントロールの追加方法だと思います。

spnは、マークアップのリテラルスパンコントロールであることに注意してください。

4

2 に答える 2

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;
    }
于 2012-03-02T15:49:43.970 に答える
2

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

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

于 2012-03-02T19:04:09.830 に答える