“System.Web.UI.WebControls.Literal”不允许使用子控件

本文介绍了解决ASP.NET中System.Web.UI.WebControls.Literal控件不允许使用子控件的问题,通过在Literal控件的父控件中动态添加HtmlGenericControl来替代直接添加到Literal控件,有效避免了字符串拼接带来的内存消耗。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天在写下面的代码时遭遇错误——“System.Web.UI.WebControls.Literal”不允许使用子控件('System.Web.UI.WebControls.Literal' does not allow child controls):

var postBodyDiv = new HtmlGenericControl()
{
    ID = "cnblogs_post_body",
    ClientIDMode = ClientIDMode.Static,
    TagName = "div",
    InnerHtml = body
};

var signatureDiv = new HtmlGenericControl()
{
    ID = "signature",
    TagName = "div"
};

literalBody.Controls.Add(postBodyDiv);
literalBody.Controls.Add(signatureDiv);

literalBody的类型是System.Web.UI.WebControls.Literal。将postBodyDiv与signatureDiv作为子控件添加到literalBody中,是为了避免字符串拼接带来的内存消耗。

之前字符串拼接的代码如下:

literalBody.Text = "<div id=\"cnblogs_post_body\">" + body + "</div><div id=\"signature\"></div>";

本来这不是问题,把类型由Literal改为Label就行了,但是实际场景不允许这么做,必须要用Literal。

后来采取了在literalBody的父控件中动态添加postBodyDiv与signatureDiv的方法解决了问题,代码如下:

var postBodyDiv = new HtmlGenericControl()
{
    ID = "cnblogs_post_body",
    ClientIDMode = ClientIDMode.Static,
    TagName = "div",
    InnerHtml = body
};

var signatureDiv = new HtmlGenericControl()
{
    ID = "signature",
    TagName = "div"
};

var bodyControlIndex = this.Controls.IndexOf(literalBody);
if (bodyControlIndex >= 0)
{
    Controls.AddAt(bodyControlIndex, postBodyDiv);
    Controls.AddAt(bodyControlIndex + 1, signatureDiv);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值