从 C# 代码隐藏错误创建 ASP.NET 控件

Posted

技术标签:

【中文标题】从 C# 代码隐藏错误创建 ASP.NET 控件【英文标题】:Creating ASP.NET controls from C# Code Behind error 【发布时间】:2015-12-16 08:55:27 【问题描述】:

请考虑以下几点:

后面的代码:

public void InitiateTable() 

    Controls.Add(new LiteralControl("<table class=\"table table-invoice\" >")); //Line that gave me error
    ...
    Controls.Add(new LiteralControl("</table>"));

在我的 ASP.Net 页面上:

<% InitiateTable(); %>

当我运行代码时,它给了我一个错误提示:

The Controls collection cannot be modified because the control contains code blocks (i.e. <% ... %>).

谁能解释我做错了什么? 谢谢。

【问题讨论】:

"The Controls collection cannot be modified because the control contains code blocks"的可能重复 【参考方案1】:

注意按照评论中的建议将 LiteralControl 更改为 Control。

您不能修改容器包含 代码块的控件集合,因为错误消息告诉您。 Controls.Add 将修改控件集合。要解决这个问题:

在你的aspx页面改变

<% InitiateTable(); %>

<asp:Literal runat="server" id="mytable" />

然后在您的页面加载方法中,添加对 InitiateTable() 的调用

然后在您的 InitiateTable() 方法中将您的代码更改为以下内容:

public void InitiateTable() 

    var literalControlValue = new StringBuilder();

    literalControlValue.Append("<table class=\"table table-invoice\" >"); 
    ...
    literalControlValue.Append("</thead>"));

    mytable.Text = literalControlValue.ToString();

【讨论】:

您好,感谢您的回复,但我收到此错误 `Unknown server tag 'asp:LiteralControl'..` 我能知道为什么会这样吗?提前致谢。 这是因为 LiteralControl 位于 System.Web.UI 命名空间中,而不是像许多其他控件一样位于 System.Web.UI.WebControls 命名空间中。只需在您的 aspx 页面指令中添加适当的标签前缀和 system.web.ui 即可。 应该是asp:Literal而不是asp:LiteralControl【参考方案2】:

Controls.Add(new LiteralControl("&lt;table class='table table-invoice'&gt;"));

【讨论】:

【参考方案3】:

问题是当您使用Controls 时,您引用的是页面本身,而不是您调用InitiateTable 的区域。

如果您要在该区域中插入控件,这就是占位符的用途:

<asp:Placeholder id="phTable"></Placeholder>

然后在您的 Page_Load 或其他一些事件代码中:

private void Page_Load(object sender, System.EventArgs e)

    phTable.Controls.Add(new LiteralControl("<table class=\"table table-invoice\" >"));
    phTable.Add(new LiteralControl("</thead>"));

【讨论】:

以上是关于从 C# 代码隐藏错误创建 ASP.NET 控件的主要内容,如果未能解决你的问题,请参考以下文章

隐藏面板内的 ASP.NET updatepanel 可能存在错误

C#和ASP.NET之事件

在 Asp.net C# 中创建动态控件,并缓存控件并绑定数据

ASP.NET 控件无法在 Visual Studio 2008 的代码隐藏中引用

如何在asp.net控件InnerHtml c#中的div标签中使用类

C# ASP.Net - ListBox - onSelectedIndexChanged 导致错误