首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >可以将子控件添加到HtmlGenericControl中吗?

可以将子控件添加到HtmlGenericControl中吗?
EN

Stack Overflow用户
提问于 2011-07-12 13:45:58
回答 3查看 16.1K关注 0票数 18

我有一个非常简单的操作,尝试将一个HtmlGenericControl添加到另一个HtmlGenericControl中:

代码语言:javascript
复制
protected void Page_Load(object sender, EventArgs e)
{

  HtmlGenericControl div = new HtmlGenericControl("div");
  HtmlGenericControl p = new HtmlGenericControl("p");

  div.Controls.Add(p);//exception occurs
}

仅在调试器中引发异常-页面本身呈现时就好像什么都没有发生一样。然而,确实发生了一些事情,因为在更大的代码部分中,控件没有像它们应该呈现的那样被呈现。

实际的例外情况是:

代码语言:javascript
复制
{InnerText = '((System.Web.UI.HtmlControls.HtmlContainerControl)(div)).InnerText' threw an exception of type 'System.Web.HttpException'}

我不明白为什么会发生这种情况,因为您应该能够以这种方式向彼此添加控件。

请注意,从第一个答案开始,我再次尝试使用ID,但仍然不起作用:

我还有更多的信息。当使用占位符控件作为父控件时,也不例外:

代码语言:javascript
复制
protected void Page_Init()
{
  PlaceHolder ph = new PlaceHolder();
  HtmlGenericControl p = new HtmlGenericControl("p");

  ph.Controls.Add(p);//no problem
}
EN

回答 3

Stack Overflow用户

发布于 2012-07-12 23:02:03

我认为避免此错误的一个简单解决方案是将子HtmlGenericControl呈现为一个字符串,然后将其添加到InnerHtml属性内的父对象中。如下所示:

代码语言:javascript
复制
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;
票数 1
EN

Stack Overflow用户

发布于 2014-02-15 20:02:26

您需要先使用面板。然后,您可以创建子HtmlGenericControl,然后创建父HtmlGenericControl,然后可以将父控件添加到面板中。例如:

代码语言:javascript
复制
<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);
票数 1
EN

Stack Overflow用户

发布于 2011-09-29 10:29:59

你可以

创建asp:Panel并将其完全渲染为div,然后在其中添加所需的所有控件

div.InnerHtml += p.InnerHtml

这会将p的呈现html添加到div

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6659948

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档