dottext入门篇( 转)
如果有什么理解得不正确的地方,也请大家指正。
这样就起码对.text有一点点认识,而且配置过程中建立*.*对asp.net的映射这一步对理解.text的启动过程是很关键的。
ok,我们开始
先打开default.aspx,这里面比较难理解的是那个MASTERPAGE,这是一个容器控件。(dottext里面有很多这种"故弄玄虚"的东西,
明明很简单地东西,他要搞得很复杂,呵呵,开个玩笑,作者当然不是吃饱了撑的,他这样做是为了更好的兼容性和更大的自用度,
只要我们用心去脱下姑娘身上最后的红肚兜,那发挥的自由空间都是你的啦,哈哈),正因为它是个容器控件,才使得这么几句代码,
就让我们拥有首页的那么多东东,我们要在首页上加点什么,只要往容器里扔就是了。当然我们关心的怎么个扔法,谁来负责
(这个扔没有你在大街上仍西瓜皮那么简单,也没有小李飞刀扔飞刀那么难).
前面我们提到过*.*对asp.net的映射,当我们在请求default.aspx的时候,就是这个映射把处理权抢去了,
这个也就是大名鼎鼎的url重写. 这里的url重写,就是处理你请求的页面前先执行Dottext.Common.UrlManager.UrlReWriteHandlerFactory
里面的gethandler,打开iaUrlReWriteHandlerFactory这个类,比较关键一句
HttpHandler[] items = GetHttpHandlers(context),作用是从web.config的那堆正则表达式里面读取对应的用户控件。
我们以请求default.aspx为例,看看整个过程:
从web.config的正则表达式中,我们得到default.aspx要插入的用户控件是CategoryPostsList,
然后ProccessHandlerTypePage调用HandlerConfiguration.SetControls 把它插入到 context.Items
(在加载default.aspx的时候会再读出来)。
最后PageParser.GetCompiledPageInstance(url,pagepath,context)把处理权力交回给default.aspx
理解default的另一关键是理解动态加载用户控件,
.text是由masterpage控件来完成动态加载的
我们回到default.aspx文件,打开可以看到default.aspx 继承自Dottext.Web.UI.Pages.DottextMasterPage。
DottextMasterPage里面由 Dottext.Common.UrlManager.HandlerConfiguration.GetControls(Context)把原来插入到context里面的
控件读出来,并插入到CenterBodyControl中。
从default.aspx的顶部我们找到masterpage类,这里面两个非常重要的成员BuildMasterPage()和BuildContents()
BuildMasterPage()是加载模板文件的,而BuildContents()完成动态加载!我们打开aggsite里面的template.ascx会找到一个
CONTENTREGION控件,他的名字叫做MPMain,我们是不是还记得MPMain这个名字在哪里见过?呵呵,是的,default.aspx里面也有一个
我们结合BuildContents()里面的代码可以非常清楚看到通过替换完成了动态加载。
理解了首页的整个过程,同样也就理解了个人blog页面的加载过程。区别在于请求页面执行重写过程的时候,
从web.config读取该往容器里插入的ascx不同而已。这里面还有个皮肤的问题,实际上还是一样的,不同的皮肤,加载不同目录下的
模板文件和用户控件。
下一篇我们一起来研究 .text的数据库。
qq 42731209
浙公网安备 33010602011771号