可以添加子控件到HtmlGenericControl吗?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (47)

我有一个非常简单的操作,我尝试将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
}
提问于
用户回答回答于

我认为避免这种错误的一个简单的解决方案可以是将子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;
用户回答回答于

“只在调试器中抛出一个异常 - 页面本身呈现为没有发生任何事情。”

这很好,因为如果有子控件,InnerText将不起作用; 这是设计的原因,因为它不想为各种性能,生命周期和侧面影响原因呈现当时控件的整个层次结构。

“......肯定会发生某些事情,因为在更大一部分代码中,控件不会像应该那样呈现。”

那是什么意思?在代码的“大部分”中渲染不正确?我的猜测是这是其他地方的问题,并且与在此问题中的问题无关。

忽略父控件上的InnerText中的异常。你需要提出一个新的问题,关于你的代码中“大部分”的问题。

所属标签

可能回答问题的人

  • 不吃貓的鱼oo

    5 粉丝466 提问6 回答
  • Richel

    8 粉丝0 提问4 回答
  • 发条丶魔灵1

    6 粉丝525 提问3 回答
  • 人生的旅途

    10 粉丝484 提问3 回答

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励