內部框架的理解分為兩個方面,一個方面是DNN運作的原理,一方面是DNN程序結構
一、DNN運作的原理
運作的原理:如:DNN只有一個Default.aspx文件,所有的頁面通過這個頁面顯示。那麼這是如何實現的?DNN是通過模塊來實現的,也就是通過ascx控件來實現的。接下來的問題是:那如果這樣,頁面之間的跳轉是如何實現的?模塊之間通信是如何實現的?等等這樣的問題。
學習並理解這些運作原理可以通過建立一個DNN網站,觀察它的運行來理解。新建頁面,插入模塊,點擊模塊,觀察模塊間的跳轉。這樣慢慢就可以理解這些基本的概念
運行中的DotNetNuke只有一個頁面:就是Default.ASPx這個文件(當然,在安裝的時候有Install.aspx文件以及其他幾個有限的配置文件),其他的文件全部都是ascx文件——也就是.net的“用戶控件”,這有一個好處就是所有的入口統統都是這個 Default.aspx文件,比如像皮膚之類的,就好處理多了。ascx文件是通過模塊配置的功能來配置的。DotNetNuke採用這種方式,使得整個系統的編程就是編寫一些用戶控件而已,不需要改動整個系統的架構,所有模塊級的錯誤都在模塊中體現,不會影響到整個系統,這是非常好的一種結構。
由於整個系統只有一個Default.aspx文件,所以當用戶在操作的時候,只操作這一個文件,這造成的後果就是所有的內容都是在一個窗口中打開的!
DNN頁面生成引擎原理
DNN頁面生成的運作方法相當複雜,並非三言兩語講得完整,以下是所尋到的脈絡,希望對研究DNN的朋友們有些幫助,文字畢竟抽象了些,以後會接著貼出些關鍵代碼來詳盡說明。
1, 得到Portal和Page信息:
HttpModule是起點,它先截取Http請求,在Application_BeginRequest 事件中,進行Url rewrite處理後得到tabId和portalAliasInfo,通過這兩個參數生成一個PortalSettings對象,取得Portal信息和當前的Tab信息.存入Context對象備用。
2, 顯示Page和Modules:
Default.aspx的Page_init事件裡先取得Context對象中的Portal和Tab信息,加載他們所指定的Skin。
在Skin.vb中(a):找出PaneControl; (b): 加載ModuleControl;(c):PaneControl.Controls.Add(ModuleControl)將ModuleControl插入PaneControl.Controls。
最後在觸發ModuleControl.Page_Load事件時加載Module中的數據。
DotNetNuke只使用一個頁面來實現顯示信息的功能,這個頁面就是Default.aspx。這個頁面是所有控件和皮膚元素的容 器,DotNetNuke需要使用這些控件和皮膚元素來實現提交內容給門戶用戶的目的。可以在Default.aspx頁面中為其他的信息引用一個 placeholder,因為Default.aspx頁面的內容是非常基本的,如果從IDE中查看頁面的源代碼就會明白。它包含一個需要裝載之內容的 placeholer,以及一些DotNetNuke使用的錯誤處理程序。當看下面的代碼,有一些更多的東西將會被“注射”在頁面中,而不僅僅是頁面的代碼所顯示的頁面應有的外觀。
一定想知道所有這一切是如何工作的?當一個URL被請求,同時當用戶進入DotNetNuke,請求就被檢查,並通過一個數據庫表來確定一個合適的皮 膚。一旦確定了適當的皮膚,基於皮膚方案的定義,用戶自定義的控件就會被“注射”到頁面。實現這個功能的邏輯則定義在Admin/Skins /skin.vb文件中。下面的代碼顯示確定皮膚並裝載它的邏輯。
二、DNN程序結構:則主要包括如:
Provider 模式、CBO(Custom Business Objects)和CBO的Controller類、
集中的CBO填充方式、使用 ASP.NET 2.0的Membership, Roles, 和 Profile 、Providers API、本地化的實現
浙公网安备 33010602011771号