从C#Code Behind错误

时间:2015-12-16 08:55:28

标签: c# asp.net

请考虑以下事项:

代码背后的代码:

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. <% ... %>).

有人可以解释一下我做错了什么吗? 谢谢。

3 个答案:

答案 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>"));
}