您的位置:首页 > 编程语言 > ASP

学习ASP.NET Starter Kit[Portal](20050701)

2005-07-01 17:18 549 查看
今天主要是想搞清楚,网站是怎么样根据PortalCfg.xml里的配置信息来更改页面,实现这种灵活配置的功能的.主要涉及到的文件有配置文件及相关的架构和数据集文件(PortalCfg.xml, PortalCfg.xsd, PortalCfg.cs),Global.asax,Configuration.cs这几个文件,然后就是根据具体的页面来看里面到底是怎么在工作的(DesktopPortalBanner.ascs, 和DesktopDefault.aspx).

看过之后也觉得不是很难,主要描述如下:

1. 客户端发起一个请求后, BeginRequest事件被触发,Global类里的Application_BeginRequest方法执行,这个方法首先获得Url中传的两个参数tabIndex(页面导航控件中,标签在DataList中的索引.主要是确定选择了哪个链接,然后会让该链接失效,即不能在本页面点击本页面的链接)和tabID(这个就是标签的ID了).

然后是根据这两个参数,获得一个PortalSettings对象,这个对象就包含了请求的标签连接中所有的配置信息,还获得SiteConfiguration 对象(xml配置文件的处理类的实例), 并将这个对象存放在HttpContext.Current.Items中,以便其他地方使用起来很方便.(以前没这样用过!)

2. 以DesktopDefault.aspx页面为例,通过下面的代码实现动态的加载页面模块.

// Obtain PortalSettings from Current Context
PortalSettings portalSettings = (PortalSettings) HttpContext.Current.Items["PortalSettings"];
//// Dynamically Populate the Left, Center and Right pane sections of the portal page
if (portalSettings.ActiveTab.Modules.Count > 0)
// Loop through each entry in the configuration system for this tab
foreach (ModuleSettings _moduleSettings in portalSettings.ActiveTab.Modules) Control parent = Page.FindControl(_moduleSettings.PaneName);

// If no caching is specified, create the user control instance and dynamically
// inject it into the page. Otherwise, create a cached module instance that
// may or may not optionally inject the module into the tree

if ((_moduleSettings.CacheTime) == 0)
PortalModuleControl portalModule = (PortalModuleControl) Page.LoadControl(_moduleSettings.DesktopSrc);
portalModule.PortalId = portalSettings.PortalId;
portalModule.ModuleConfiguration = _moduleSettings;

parent.Controls.Add(portalModule);
}
else
CachedPortalModuleControl portalModule = new CachedPortalModuleControl();

portalModule.PortalId = portalSettings.PortalId;
portalModule.ModuleConfiguration = _moduleSettings;

parent.Controls.Add(portalModule);
}

// Dynamically inject separator break between portal modules
parent.Controls.Add(new LiteralControl("<" + "br" + ">"));
parent.Visible = true;
}
}

总体来说代码不难,但if ((_moduleSettings.CacheTime) == 0) {}else{}

else里面的缓存功能是如何实现的,我还没有搞清楚!!郁闷~~~~~~~

就这样动态加载页面模块的功能实现了,现在终于对这个功能有所了解了!!!

哦~~~~~~~对了,今天还看了角色身份认证的实现,里面竟然还有Bug,郁闷~~~~~~

这个实现得也很简单.

明天准备具体的看代码,但也不会很仔细的看,只是大致看看,学习一些编程技巧和补充自己的知识吧!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: