从C#代码隐藏错误创建ASP.NET控件
本文关键字:ASP NET 控件 创建 错误 代码 隐藏 | 更新日期: 2023-09-27 18:27:03
请考虑以下事项:
代码背后:
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. <% ... %>).
有人能解释一下我做错了什么吗?非常感谢。
注意:按照注释中的建议,将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();
}
Controls.Add(new LiteralControl("<table class='table table-invoice'>"));
问题是,当您使用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>"));
}