我想添加服务器端控件(CheckBoxList
s& Button
):
ChkBoxLst1
& ChkBoxLst2
& Button1
通过代码隐藏,然后使用HTMLTextWriter
呈现控件。
我似乎无法做到这一点。
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是标记中的文字跨度控件。
答案 0 :(得分: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;
}
答案 1 :(得分:2)
虽然您已将这些控件呈现给浏览器,但控件不是页面控件树的一部分,甚至不会在回发中存在。每个请求都需要添加任何动态添加的控件。
为什么要玩HtmlTextWriter呢?只需在Page_Load期间将控件添加到页面中,它们就会为您呈现。在“if(!Page.IsPostBack)”之外这样做,每次页面加载时它们都会在那里,这就是你想要的。