小心ASP.NET 2.0 的Skin特性伤害到您! 软件之美,美在缺陷

        众所周知,.NET Framework 2.0为ASP.NET 2.0带来很多令人兴奋而又激动人心的特性(Feature),包括主从页(MasterPage)、异步页、回调等一大堆新的技术。但今天我要讲的,是其中一个对最终用户非常有价值的特性-主题(Skin)。
        在VS.NET 2005中使用Skin是非常容易的,过程我就不提了。但是如果没有深入了解其中的一个特点,它可能让您走很多弯路。下面是我遇到的一个问题,花了一个下午才找到原因所在:
        我有一个ASP.NET 2.0的网站项目,我在项目中使用了Skin和Web部件。在定义一个Skin时,我先定义一个CatalogZone里包含一个部件PageCatalogPart,这个部件可显示页面中所有存在并关闭状态的Web部件,并允许您加入这些Web部件到页面中。为CatalogZone设置好各种样式后将这些代码Copy到一个存放在AppThemes文件夹下的Skin定义文件中。默认情况下只需要删除其中的ID属性即可,在页面中应用(Page.Theme = YourThemeName)时,ASP.NET 2.0会自动套用其中的颜色、字体等样式。做完上面的一切后,我按下了F5键,一起都按我想象的方式运转起来了,看起来很不错,不是吗?
        在一切就绪后,我发现我还需要一个Web部件DeclarativeCatalogPart,它代表目录中的Web部件定义。通过这个Web部件来管理目录中的Web部件定义并使您可以根据这些定义产生多个实例在页面上。当我把DeclarativeCatalogPart放置到CatalogZone部件上并运行起来时,发现并没有出现页目录(5)这个选项,于是我想啊想,调啊调,最后才想起问题可能在Skin中。于是打开那个Skin文件,把里面的 <ZoneTemplate> 去掉后再次运行,一切OK。
        问题已经找到并解决了,但原因是什么呢?留给各位自己去思考。
原文地址:https://www.cnblogs.com/Johnson/p/419161.html