当我尝试使用设计器中的表单类变量时,为什么会出错?

时间:2018-08-20 09:04:28

标签: c# asp.net webforms

在后面的代码中,我有一个名为ReportFeaturesPage_Load事件的属性:

    public partial class FeatureList : System.Web.UI.Page
    {
        protected string ReportFeatures;

        protected void Page_Load(object sender, EventArgs e)
        {
            IEnumerable<ReportFeature> featureProps = fim.getFeatureProperties();

            ReportFeatures = featureProps.ToJson();
        }
    }

在设计器中,我尝试访问ReportFeatures变量:

<head runat="server">
    <title></title>
    <script type="text/javascript">
        window.reportFeatures = <%= ReportFeatures%>;
    </script>
</head>

页面加载后出现此错误:

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

有人知道为什么会出现该错误,以及如何解决该错误?

1 个答案:

答案 0 :(得分:0)

请尝试使用数据绑定表达式语法(<%= ... %>),而不要使用<%# ... %>块,因为<%= ... %>隐式调用Response.Write()中的Page.Header方法,该方法算作代码块,而数据绑定表达式不计数:

<head runat="server">
    <title></title>
    <script type="text/javascript">
        window.reportFeatures = <%# ReportFeatures %>;
    </script>
</head>

然后在Page.Header.DataBind()事件中添加Page_Load方法,因为您想在包含ReportFeatures属性的<head>标记内绑定runat="server"

protected void Page_Load(object sender, EventArgs e)
{
    IEnumerable<ReportFeature> featureProps = fim.getFeatureProperties();

    ReportFeatures = featureProps.ToJson();

    // add this line
    Page.Header.DataBind();
}

有关此问题的更多详细信息,请参见here