控件包含代码块,因此无法修改控件集合

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
简介: 原文 http://www.cnblogs.com/jsonzheng/archive/2011/01/18/1938403.html 控件包含代码块(即),因此无法修改控件集合。 说明: 执行当前 Web 请求期间,出现未处理的异常。

原文 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动态添加控件,而引发错误。
?
< html xmlns = "http://www.w3.org/1999/xhtml" >
    < head runat = "server" >
       < script type = "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:Label ID = "lb_Time" runat = "server" Text = "lb_Time" ></ asp:Label >
       < input id = "btn_Show" type = "button" value = "button" onclick = "return showTime()" />
    </ body >
</ html >

解决方案如下:
1、把javascript放到body中
2、声明自定义控件来代替包含了代码块(即<% ... %>)
控件代码:
?
public class ControlInfoWriter : Control
{
    private string writerControlID;
    private string writerProperty;
 
    public string WriterControlID
    {
        get { return writerControlID; }
        set { writerControlID = value; }
    }
 
    public string WriterProperty
    {
        get { return writerProperty; }
        set { writerProperty = value; }
    }
 
    protected override void Render(System.Web.UI.HtmlTextWriter writer)
    {
        object writerControl = this .Parent.FindControl(writerControlID); //查找要输出的控件
        Type t = writerControl.GetType(); //获取控件的类型
        PropertyInfo pi = t.GetProperty(writerProperty); //获取要输出的属性
        string value = pi.GetValue(writerControl, null ).ToString(); //得到控件的属性值
        writer.Write(value);
        base .Render(writer);
    }
}

head中的javascript修改如下:
?
<script type= "text/javascript" >
function showTime()
{
    var now = new Date();
    var lbTime = 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 欢迎转载或分享,但请务必声明文章出处。如果文章对您有帮助,希望你能推荐或关注

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
目录
相关文章
|
开发框架 前端开发 JavaScript
Asp.net动态加载用户自定义控件,并转换成HTML代码
Asp.net动态加载用户自定义控件,并转换成HTML代码
209 0
|
5天前
|
云安全 人工智能 安全
AI被攻击怎么办?
阿里云提供 AI 全栈安全能力,其中对网络攻击的主动识别、智能阻断与快速响应构成其核心防线,依托原生安全防护为客户筑牢免疫屏障。
|
15天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
9天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
614 216
|
存储 人工智能 监控
从代码生成到自主决策:打造一个Coding驱动的“自我编程”Agent
本文介绍了一种基于LLM的“自我编程”Agent系统,通过代码驱动实现复杂逻辑。该Agent以Python为执行引擎,结合Py4j实现Java与Python交互,支持多工具调用、记忆分层与上下文工程,具备感知、认知、表达、自我评估等能力模块,目标是打造可进化的“1.5线”智能助手。
857 61
|
7天前
|
人工智能 移动开发 自然语言处理
2025最新HTML静态网页制作工具推荐:10款免费在线生成器小白也能5分钟上手
晓猛团队精选2025年10款真正免费、无需编程的在线HTML建站工具,涵盖AI生成、拖拽编辑、设计稿转代码等多种类型,均支持浏览器直接使用、快速出图与文件导出,特别适合零基础用户快速搭建个人网站、落地页或企业官网。
1284 157
|
5天前
|
编解码 Linux 数据安全/隐私保护
教程分享免费视频压缩软件,免费视频压缩,视频压缩免费,附压缩方法及学习教程
教程分享免费视频压缩软件,免费视频压缩,视频压缩免费,附压缩方法及学习教程
241 138
|
7天前
|
存储 安全 固态存储
四款WIN PE工具,都可以实现U盘安装教程
Windows PE是基于NT内核的轻量系统,用于系统安装、分区管理及故障修复。本文推荐多款PE制作工具,支持U盘启动,兼容UEFI/Legacy模式,具备备份还原、驱动识别等功能,操作简便,适合新旧电脑维护使用。
529 109