我有一个非常简单的操作,尝试将一个HtmlGenericControl添加到另一个HtmlGenericControl中:
protected void Page_Load(object sender, EventArgs e)
{
HtmlGenericControl div = new HtmlGenericControl("div");
HtmlGenericControl p = new HtmlGenericControl("p");
div.Controls.Add(p);//exception occurs
}
仅在调试器中引发异常-页面本身呈现时就好像什么都没有发生一样。然而,确实发生了一些事情,因为在更大的代码部分中,控件没有像它们应该呈现的那样被呈现。
实际的例外情况是:
{InnerText = '((System.Web.UI.HtmlControls.HtmlContainerControl)(div)).InnerText' threw an exception of type 'System.Web.HttpException'}
我不明白为什么会发生这种情况,因为您应该能够以这种方式向彼此添加控件。
请注意,从第一个答案开始,我再次尝试使用ID,但仍然不起作用:
我还有更多的信息。当使用占位符控件作为父控件时,也不例外:
protected void Page_Init()
{
PlaceHolder ph = new PlaceHolder();
HtmlGenericControl p = new HtmlGenericControl("p");
ph.Controls.Add(p);//no problem
}
发布于 2012-07-12 23:02:03
我认为避免此错误的一个简单解决方案是将子HtmlGenericControl呈现为一个字符串,然后将其添加到InnerHtml属性内的父对象中。如下所示:
HtmlGenericControl parent = new HtmlGenericControl("div");
HtmlGenericControl child = new HtmlGenericControl("div");
StringWriter stringWriter = new StringWriter();
HtmlTextWriter twr = new HtmlTextWriter(stringWriter);
child.RenderControl(twr);
string rendered=stringWriter.ToString().Replace("\r","").Replace("\n","").Replace("\t","");
parent.InnerHtml = rendered;
发布于 2014-02-15 20:02:26
您需要先使用面板。然后,您可以创建子HtmlGenericControl,然后创建父HtmlGenericControl,然后可以将父控件添加到面板中。例如:
<asp:Panel ID="panel" runat="server" ></asp:Panel>
//parent
HtmlGenericControl div = new HtmlGenericControl("div");
//child
HtmlGenericControl p = new HtmlGenericControl("p");
// adding child control to parent control.
div.Controls.Add(p);
div.Visible = true;
//adding parent control to panel
panel.Controls.Add(div);
发布于 2011-09-29 10:29:59
你可以
创建asp:Panel并将其完全渲染为div,然后在其中添加所需的所有控件
或
div.InnerHtml += p.InnerHtml
这会将p的呈现html添加到div
https://stackoverflow.com/questions/6659948
复制相似问题