1

我想添加服务器端控件(CheckBoxLists & Button):

ChkBoxLst1&&通过 Code ChkBoxLst2- Button1behind 然后使用 anHTMLTextWriter来呈现控件。

我似乎无法做到这一点。

以上所有内容都在 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 不会被触发,并且选择的值不会像我在上面所做的那样被保存。关于为什么不的任何想法?我尝试了两个复选框列表的比较,但是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 回答