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

本文探讨了在ASP.NET中因动态内容导致的部分系统报错问题,并提供了两种解决方案:一是将动态内容移至body内;二是创建用户控件放置动态内容,确保HTML头部的正确生成。

最近遇到一个奇怪的问题,一段在 head 中的代码,有些大多数人的机器上运行没有问题,我在服务器上执行也没有问题,而在一部分人执行起来就直接报错:

控件包含代码块(即 <% ... %>),因此无法修改控件集合。

出问题的两个系统一个是 2003 企业版,一个是 2008 企业版,都是安装在个人电脑上,但服务器使用的也是 2008 企业版,却没有出问题,SP补丁版本,.Net Framework版本也都相同,确实很奇怪,莫非是 Z 版支持较好?

 

出问题的代码:

 

< head runat = ”server” >
    
< link href = " <%= ResolveUrl( " ~/ Style / main.css " ) %> "  type = " text/css "  rel = " stylesheet "   />
    
< script type = " text/javascript "  src = " <%= ResolveUrl( " ~/ JavaScript / jquery.js " ) %> " ></ script >
</ head >

 

 

查找了一些资料,认为应该是一个 .Net 框架限制的问题,因为 aspx 页面的 head 必须加 runat=”server” 属性,那么其下的所有标签也应该被处理成了控件树的一部分,下层数据的动态改变导致上层容器就变得无法修改集合,当然,这也是基于一种猜测,但是我找到的最有可能的一种猜测。

 

不管 .Net 内部搞什么灰机,我要解决当下的问题,总的说来有两种解决之道:

 

1、网络上盛传的方法,将 head 中所有涉及 <% ... %> 的元素都移到 body 中去,但显然这是一种不得已而为之的办法,引用式样和脚本本身就应该处于 head 中才对,不推崇。

 

2、我的方法:增加一个 HeadQuote.ascx 用户控件,然后将这个控件引用到 head 中

 

< head runat = " server " >
   
< uc1:HeadQuote ID = " HeadQuote1 "  runat = " server "   />
</ head >

 

 

虽然产生的过程不够漂亮,但至少最终的结果(Html 页面代码)却是令人满意的,希望这篇文章也能对你有所帮助。

转载于:https://www.cnblogs.com/islee/archive/2010/07/03/1770463.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值