请考虑以下事项:
代码背后的代码: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. <% ... %>).
有人可以解释一下我做错了什么吗? 谢谢。
答案 0 :(得分:2)
注意按照评论中的建议将LiteralControl更改为Control。
您无法修改容器所包含的控件集合&lt; %%&gt;错误消息告诉您的代码块。 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();
}
答案 1 :(得分:0)
Controls.Add(new LiteralControl("<table class='table table-invoice'>"));
答案 2 :(得分:0)
问题是,当您使用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>"));
}