DNN中的Skinning系统

Skinning 早有耳闻。但很汗的是, DNN 才是我接触过的第一个采用 Skinning 的项目。所谓 Skinning 就是实现功能和外观的分离。但由于接触 Asp.net 不多。看了挺长时间 DNN 了,现在才对整个 Skinning 系统有了一定的理解。
DNN 中,所谓的皮肤由两部分组成。即 skin container 。由于这是 DNN 的标志性功能。对这些讲解的文章很多。在 /Documents/DotNetNuke Skinning 中,我觉得讲的已经足够清楚了。我想写的是整个页面的绘制过程。
1.             首先,从键入一个 Url 开始。这个 Url 将会被 UrlRewriteModule 类率先获得。并利用 Asp.net 所支持的 Url 重写系统对一个 Url 进行重写。我一直对这个重写机制有着很多的疑问。但在看完后,很多疑问都得以解决。推荐和我一样对 Url 重写不大了解的人看下这篇文章。 DNN Url 重写几乎是按照这篇文章的标准格式完成的。
2.             重写完毕的 Url 将被定位到一个页面上,一般是 Default.aspx 页面。这个页面的后台类是 Cdefault 。这个类的 LoadSkin方法将加载skin。Skin的路径一般会在PortalSettings.ActiveTab.SkinSrc中。Tab才是真正的页面标示,因为几乎所有的页面都是在Default.aspx上动态绘制,只有通过Tab来区分。在数据库中,我们可以看到Tabs中存放着skinsrc和containersrc。在TabModules中,保存着每一个Tab的模块及其位置。
3.             在每一个Skin,即每一个Skin.ascx的后台类都是Skin。它会取出所有页面上ID为contentpane,leftpane,rightpane,topane,bottompane。的td,span,div,p。(ID必须唯一)并取出相应的container放进去。并且在每个container中ID为contentpane的控件上放入相应的module。这样就绘制出了整个页面。
原来我以为会在Default.aspx的后台类中加载skin,container,module。但它只在其中完成了skin的加载,大部分的功能都在skin.ascx的后台类中完成。我想这样设计自然会有它的理由。也许是为了集中控制。希望能听到高人的理解。
给我最大的启发就是要想实现功能部件的分离,和动态的组装。必须有一定的语法规则。就是通过彼此都默认的字串把各部件联系在一起。同时还要有从字串生成对象或是调用功能的能力。从skinning中可以看到。类似于Contentpane这样命名规则必须遵守,同时还要有Loadcontrol(controlpath as string) as usercontrol这样由字串直接加载成控件的能力。在.net中提供了很多这样的机制,如反射。这种机制的引入,通常会提高灵活性,但也免不了会付出一些代价,使用时要根据需求,权衡利弊。









本文转自 duguguiyu 51CTO博客,原文链接:http://blog.51cto.com/duguguiyu/362841,如需转载请自行联系原作者
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值