程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> 使用拼湊URL的方法,實現DotNetNuke在新窗口中打開內容(一)

使用拼湊URL的方法,實現DotNetNuke在新窗口中打開內容(一)

編輯:關於ASP.NET

『注:這是比較早期一點,使用Google Docs整理自己的思路的時候寫的文章,為了將整個思考的過程體現出來,貼在博客園上;由於內容比較多一些,因此,拆分成兩個部分。』

DotNetNuke在新窗口中打開編輯內容

這個問題困惑了很久,現在既然已經解決了,干脆把解決的思路和過程寫下來。

從本質上來說,運行中的DotNetNuke只有一個頁面:就是Default.aspx這個文件(當然,在安裝的時候有Install.aspx文件以及其他幾個有限的配置文件),其他的文件全部都是ascx文件——也就是.Net的“用戶控件”,這有一個好處就是所有的入口統統都是這個 Default.aspx文件,比如像皮膚之類的,就好處理多了。ascx文件是通過模塊配置的功能來配置的。DotNetNuke采用這種方式,使得整個系統的編程就是編寫一些用戶控件而已,不需要改動整個系統的架構,所有模塊級的錯誤都在模塊中體現,不會影響到整個系統,這是非常好的一種結構。

但是我在使用DotNetNuke做開發的時候,遇到的一個很大的問題也正是這種結構引起的:由於整個系統只有一個Default.aspx文件,所以當用戶在操作的時候,只操作這一個文件,這造成的後果就是所有的內容都是在一個窗口中打開的!比如說,如果我用DotNetNuke做新聞發布平台的話,用戶能做的就是點擊新聞,在同一個頁面打開,然後點返回,到下一條新聞再打開。這種方式對於美國人來說是非常正常的,比如我們看CNN或者NBA或者其他的國外網站,基本上新聞都是在當前的頁面打開的,而不會在新的窗口中打開;而如果我們看一下新浪、搜狐、雅虎中國等網站的話,我們就會發現,基本上新聞內容都是在新窗口中打開的,一般來說,中國人看新聞都會有若干個浏覽器窗口同時打開,然後一個頁面一個頁面的看完之後再關閉掉。

為什麼東西方會有這樣的差異呢?我以為最開始可能是由於網絡速度引起的,一開始的時候由於網絡的帶寬不夠,所以在國內看網頁的速度是非常慢的;而美國由於身處互聯網的腹地,所以可能網絡的浏覽速度會更快一些,所以就造成了國人一般都是同時打開若干個窗口,在看當前窗口的新聞的時候,其他的新聞在後台加載,這樣是最節約時間的;而在美國則不存在這個問題。

好了,說了這個問題之後,就引出了我的問題了:DotNetNuke的所有內容都是在一個窗口中打開的,這完全不符合中國人的閱讀習慣。尤其是在五月底見了一個客戶之後,感覺就更明顯了,所以,要麼改變這種情況,要麼就拋棄DotNetNuke,這是我一直以來非常痛苦的地方——基於DotNetNuke 編程已經兩年多了,結果因為這個問題沒辦法進行下去,實在是太痛苦了。

當然,並不是說DNN完全不支持多窗口的模式,內容還是可以在新窗口中打開的,比如像EditUrl直接Redirect到新窗口,還是可以的;但是這樣最大的問題就是新的窗口裡面包含了系統菜單、隱私說明、Banner等全部的內容,而不是僅僅只有我希望顯示的模塊的內容。這麼做其實是等於把同一個系統在多個窗口裡面打開了,而不是一個系統的一部分(也就是只有內容部分,不包括系統菜單等系統的部分)。

關於這個問題,曾經想了這麼幾個解決方案:

自 己重新寫一個aspx頁面,用這個頁面動態的加載DotNetNuke模塊的ascx文件:這樣當然也不是不行,但是問題是如果自己寫一個頁面的話,很多 DNN內置的變量,如UserID、ModuleID、Settings等等這些設置就完全沒辦法帶到新的頁面裡面了,必須要通過URL來傳遞這些參數; 而且,這麼做最大的問題就是已經完全破壞了DNN的整體架構的完整性,會搞得亂七八糟,這是最壞的一種做法;

建立一個自己的系統,和DNN進行數據交互:這是個比較瘋狂的想法,我希望我的aspx驅動的系統和DNN可以共享數據,從而讀取DNN的數據結構,這是在上次和用戶交流過了之後,實在是沒有辦法的時候想的一個想法,目前這個想法已經被否定了;

換 平台,不用DNN:這也是一個比較瘋狂的想法,如果換平台的話,之前在這個系統上做的所有的努力都將白費了,這實在是我不希望看到的。說一下,因為DNN 的有些開發人員同時在Rainbow項目組工作,所以我專門去下載了一個Rainbow的平台下來,發現和DNN不同,Rainbow是aspx頁面驅動 的,而不是ascx驅動的,這就意味著如果我拋棄DNN的話,完全可以選擇Rainbow平台,不過比較郁悶的是,現在Rainbow所提供的開發版本還 是過低,而且只支持VS2003和.Net1.1,我很懷疑這個平台的活躍性。就是說,如果我選擇了一個沒有那麼多人提供模塊的平台的話——也就放棄了選 擇CMS作為我的系統架構的最大的優點:盡可能的使用開源的模塊完成更多的功能,自己只需要專注於某一塊業務,而不用管整個系統的架構和擴展性的部分;

復制一個新的Default.aspx文件,改寫這個文件,使之只包含模塊編輯的內容;

現在想起來,還是感謝Rainbow沒有提供.Net 2.0和VS2005的版本,否則的話,可能我會輕易的放棄DNN,如果那樣的話,我的工作量實在是太大了。

好,現在已經講到這個地步了,我陷入了一個怪圈:我比較喜歡DNN的開發結構和開放性,這是讓我感覺非常舒服的;但是我不喜歡的、也是大多數中國人都不太喜歡的,就是所有的功能都是在一個單獨的Default.aspx頁面裡面進行操作;老實說,我非常不喜歡,而且是要多不喜歡就有多不喜歡。那,現在怎麼辦?到底要不要放棄DNN?這對我來說真的是一個大問題了。

為了實現在新窗口裡面打開DNN的模塊,我在網上發布了大量的求助信息,尤其是在www.DotNetNuke.com的論壇上(現在在上DNN的時候發現4.8.3版本已經發布了,我現在使用的是最新的4.8.2,看來還需要升級)。

而在Google裡面,我用“DotNetNuke newwindow”、“DotNetNuke aspx”、“DotNetNuke open in New Windows”等字符串不停的搜索和找相關的資料,可惜的是,這方面的內容實在是太少了。簡單的來說,老外是不太理解為什麼我們一定要在新窗口中打開內容的。

對我來說,我覺得這是一個必須要解決的問題,如果不解決這個問題的話,恐怕我總是不會安心,而且,最重要的是,客戶不會滿意;而且,使用DNN平台將一直會有問題。我沒辦法實現我的DNN做更多的事情的想法。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved