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


主要工作都在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)

原文地址:https://www.cnblogs.com/zgqys1980/p/684283.html