摘要:   首先,ContentContainer从PlaceHolder继承而来。PlaceHolder是什么,我们看看它的源代码: public class PlaceHolder : Control {       // Methods       public PlaceHolder(); } 可见PlaceHolder除了继承了WEB.UI.Control,什么也没有做,我们可以将它理解成一个空的Control,大家知道Control之所以能够对页面产生 作用,主要依赖于其Render方法。ContentContainer从PlaceHolder继承,单并没有重写Render方法,从客户端的角度来看,它不能对网页产生 任何影响。单作为网页上的控件,它在服务器内存页面布局里面是实实在在存在的,所以,ContentContainer其实是作为容器存在的,它本身 对页面的渲染不起任何效果,单当重写了Render方法的控件被放置到容器中时,它的作用就体现出来了。它帮助将要被放置在其中的控件在页 面上占据了一个位置,使得它的子控件被定位在特定的区域。   ContentContainer有一个属性MasterPageFile,MasterPageFile指向一个ascx文件,其实就是一个控件。 ContentContainer被初始化时,首先就是加载MasterPageFile控件 ContentContainer中除了放置MasterPageFile控件外,还放置名为Content的控件集合,Content类同样也是一个占位控件。 在MasterPageFile控件内部,包含了一个Region控件(也是占位控件)的集合,ContentContainer.MoveContentsIntoRegions方法就是将所有 Content控件放置到各个Region区域,Regions的作用其实就是在MasterPage内部对Contents进行布局。   接下来,我们从CCS首页开始来分析Masterpage是如何使用的, Default.aspx内容如下: ………………………………                             该页面包含两个控件,SelectedNavigation控件用于记录当前导航位置,在此不考虑。 可以看到,整个页面就是由一个ContentContainer控件组成,上面我提到该页面加载时会加载对应的Masterpage控件,我们其实就可以将ContentContainer的位置替换成Masterpage的内容,如图示:   阅读全文]