在后面的代码中,我有一个名为ReportFeatures
和Page_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. <% ... %>).
有人知道为什么会出现该错误,以及如何解决该错误?
答案 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。