原文 http://www.cnblogs.com/jsonzheng/archive/2011/01/18/1938403.html
- 控件包含代码块(即<% ... %>),因此无法修改控件集合。
-
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.Web.HttpException: 控件包含代码块(即 <% ... %> ),因此无法修改控件集合。 - 一、错误例子解说:
-
<asp:Panel ID="p_Time" runat="server">
<%= DateTime.Now.ToString("HH-mm")%>
</asp:Panel>
Label lb=new Label();
lb.Text = "当前时间";
p_Time.Controls.Add(lb);
以上代码执行的时候,将会产生该错误。由于p_Time控件中包含了代码块(即<% ... %>),无法修改控件集合,所以当执行语句p_Time.Controls.Add(lb)时会产生错误。 - 二、通常出错的地方以及解决方案
-
通常在页面代码的head部分的javascript代码中通过<%=this.control.ClientID%>来获取服务器控件标识符(代码如下所示)等,当应用主题等功能的时候,服务器脚本会向Header动态添加控件,而引发错误。
<headrunat="server"><scripttype="text/javascript">function showTime(){var now = new Date();var lbTime = document.getElementById('<%= this.lb_Time.ClientID %>');lbTime.innerHTML = now.getHours() + ":" + now.getMinutes();}</script></head><body><asp:LabelID="lb_Time"runat="server"Text="lb_Time"></asp:Label><inputid="btn_Show"type="button"value="button"onclick="return showTime()"/></body></html>
解决方案如下:- 1、把javascript放到body中
- 2、声明自定义控件来代替包含了代码块(即<% ... %>)
-
控件代码:
publicclassControlInfoWriter : Control{privatestringwriterControlID;privatestringwriterProperty;publicstringWriterControlID{get{returnwriterControlID; }set{ writerControlID = value; }}publicstringWriterProperty{get{returnwriterProperty; }set{ writerProperty = value; }}protectedoverridevoidRender(System.Web.UI.HtmlTextWriter writer){objectwriterControl =this.Parent.FindControl(writerControlID);//查找要输出的控件Type t = writerControl.GetType();//获取控件的类型PropertyInfo pi = t.GetProperty(writerProperty);//获取要输出的属性stringvalue = pi.GetValue(writerControl,null).ToString();//得到控件的属性值writer.Write(value);base.Render(writer);}}
head中的javascript修改如下:
<script type="text/javascript">functionshowTime(){varnow =newDate();varlbTime = document.getElementById('<CustomControl:ControlInfoWriter ID="controlInfoWriter" WriterControlID="lb_Time" WriterProperty="ClientID" runat="server" />');lbTime.innerHTML = now.getHours() +":"+ now.getMinutes();}</script>
注:页面代码中要注册控件CustomControl:ControlInfoWriter
作者:郑某人 出处:http://jsonzheng.cnblogs.com 欢迎转载或分享,但请务必声明文章出处。如果文章对您有帮助,希望你能推荐或关注