关于Skined Web Control中childcontrols的添加顺序问题

作者使用ASP.NET SkinedWebControl实现重复页面组件复用时遇到显示内容更新失败的问题。通过调整加载自定义控件的顺序,解决了Repeater控件Eval绑定失效的bug。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

昨天晚上突然碰到一个很莫名其妙的bug,具体描述如下。
由于我要三个order report页面,但是三个页面中order的显示处理是完全一摸一样的。
于是我想到了用asp.net的skined Web Control把一样的html内容抽出到服务器端标记中,这样三个页面就可以引用同一个服务器端标记,如果改显示格式修改的话,只要修一个一个ascx文件即可,不要修改三个aspx页面,可以较好的符合DRY原则。
就在我觉得大功告成可以休息的时候,突然发现当查询条件改变的时候,Skined Web Control中显示内容的记录数变了,但是显示的内容居然是上一次查询的结果。
自己调试,用google搜索,折腾将近3个小时未果,于是试图把放在ascx页面的repeater中的<%# Eval %>表达式替换为<asp:label>,奇迹发生了,居然就可以正确的显示查询结果了,于是由此我得出了一个结论:用LoadControl方法会导致ascx页面中的Repeater的<%# Eval %>绑定失效。
本打算就此结束了,可是这个时候我发现网络上有篇老外的文章中也是利用和我一样的做法来定制ascx控件,他也用到了repeater和Eval但是,好像没有提到说又这样的问题,于是我对照的他的代码和我自己的代码,发现唯一不一样的地方如下
老外的代码:

[code]
cusControl = LoadControl();
Controls.Add(cusControl);
InitializeControl(cusControl);
[/code]
我的代码:
[code]
cusControl = LoadControl();
InitializeControl(cusControl);
Controls.Add(cusControl);
[/code]
最后两句的顺序不一样而已,于是就想难道一个顺序的差别又这么大?抱着死马当活马医的心理,我尝试了修改成老外的做法,编译、运行。漫长的等待后,奇迹居然发生了,Eval生效了,折腾了3个多小时的问题居然这么简单就能解决。强烈的鄙视一下自己啊。
不过现在的问题就是不知道为什么顺序不一样会导致这样的bug呢,请哪个知道的兄弟给个说法,谢谢了!!!!!!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值