skin.vb中关于页面中模块加载的原理

主要工作都在Page_Init实现

1。首先加载ControlPanel

ctlPane.Controls.Add(objControlPanel)

2.IsAdminControl() =true ( 本质就在于ctl=null 或者 ModuleId =null)

就加载module主页面。主页面和其他页面的区别就在与controlkey=null

3.IsAdminControl() =false

就根据controlkey取该模块该key所对应的ascx

样式表的应用顺序

1.default.aspx:ManageStyleSheets()

default.css

skin.css

*sinName*.css

portal.css

2.skin.vb: InjectModule()

container.css

*ContainerName*.css

skin和Container加载的过程

1。在default.aspx的Page_Init(): SkinPlaceHolder.Controls.Add(ctlSkin)

2。在skin.vb的page_init():

首先:从数据库得到module的存放位置,并在当前的skin.ascx中找到对印的Panel Dim parent As Control = Me.FindControl(objModule.PaneName)

接着:InjectModule(parent, objModule, PortalSettings)

3. InjectModule(其中 parent = objPane):

找到容器

ctlContainer = LoadContainer(objModule.ContainerSrc, objPane)

向容器的内容部分加入module

找到容器中的放module的cell

Dim objCell As Control = ctlContainer.FindControl(glbDefaultPane)

把module放入一个临时的panel

objPanel.Controls.Add(objPortalModuleBase)

把临时的panel放入容器的contentPanel

objCell.Controls.Add(objPanel)

把容器加入道objPane

生成一个领事的容器panel,并把容器加入道这个领事的panel中

Dim ctlDragDropContainer As Panel = New Panel objPane.Controls.Add(ctlDragDropContainer) ctlDragDropContainer.Controls.Add(ctlContainer)

把容器加入道

objPane.Controls.Add(ctlContainer)

最后处理action

ProcessActionControls(objPortalModuleBase, ctlContainer)