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

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

編輯:關於ASP.NET

在前面的文章中,我們介紹了如何通過一系列的“擦邊球”,使得DotNetNuke可以更加符合我們國人的網頁浏覽習慣,而這些修改,是不能動到DotNetNuke的核心的,我們總共所做的修改如下:

1、在根目錄下增加一個新的Edit.aspx,並且修改其代碼,使之所加載的皮膚與Default.aspx頁面不同;

2、在Portals/_default/Skins/[當前使用的皮膚目錄]下增加一個皮膚,這個皮膚是最簡單的,只包括DotNetNuke的幾個Pane而已,不包括其他任何的內容;

3、我們需要修改SiteUrls.config文件,從而要使得DotNetNuke能夠“認識”我們的Edit.aspx文件;

主要的修改,就是這麼多,具體的效果,大家可以點擊這個地址看一下效果,當然,也可以進入到這個網站,進入到其中的Demos下各個頁面中,查看一下效果。

為了讓大家更加清楚的了解我們所做的工作的意義,下面以問答的形式,讓大家更清楚的知道我們的工作是有必要的、而不是無用功。

問:為什麼非要在根目錄級別下增加頁面文件?難道在模塊目錄下增加aspx文件,在新窗中打開我的aspx文件不一樣是可以的嗎?

答:當然,我們可以在模塊目錄下增加aspx文件,而不是通常我們在模塊開發中所使用的ascx控件;也可以使用如/DesktopModules/Module1 /openhere.aspx這樣的URL形式來實現在新窗口中打開頁面,這個頁面就完全是由我們進行控制的了。但是,有一個問題,就是如果我們在模塊級別增加的是一個aspx文件的話,這個頁面實際上並不是我們的模塊的控制(Control)之一,也就是說,很多屬於模塊的屬性,比如ModuleID、 TabID等等變量,我們可能都需要通過URL參數或者其他的方式傳到這個頁面上去。如果我們這樣做的話,實際上,這個aspx頁面已經完全脫離了我們模塊的設計架構,從而變得更加“另類”了。只有極少數的情況下,我們才這麼做:比如說,我們所打開的數據並不是和模塊綁定的(比如說公共數據,如另外一個網站的數據等)。而如果我們所打開的新頁面是用來顯示模塊級的數據的話,大家就會發現,一定會非常麻煩,比我們現在所使用的方式更加麻煩。

大家可以看到,上面所采用的增加Edit.aspx的方式,實際上是在更底層解決這個問題,而不是模塊級別,所以,我們的解決辦法,不會影響到模塊級的數據。

以上的解釋可能有點混亂,但是我相信曾經嘗試過在模塊級增加aspx文件的可以了解這一點。

問:如http://www.dnnworkflow.cn/tabid/55/ctl/Edit/mid/374/KeyID/5/RowID/22/Edit.aspx?ContainerSrc=[G]Containers/_default/No%20Container這樣的URL中,Default.aspx後面仍然跟了參數,也就是?ContainerSrc=[G]Containers/_default/No%20Container,這個參數有什麼意義?

答:我們知道,DotNetNuke的皮膚機制是包括兩部分的,一個是Skin,一個是Container,分別對應於站點的皮膚,和容器的皮膚——就是指我們所用到的一個個模塊的皮膚了。我們現在在新窗口中打開頁面,實際上就是將一個模塊的一部分(也就是一個控制 Control)在新窗口中予以展現,如果沒有以上參數的話,大家可以看到,顯示的內容,是被容器的皮膚所包圍的。當然,如果大家覺得沒有所謂的話,大可以將這個參數去掉。我之所以增加這個參數,是考慮到如果使用window.print命令的時候,可以有更好的頁面打印效果。

問:DotNetNuke實際上已經提供了無皮膚、無容器的方式,也就是當點擊每一個模塊下面的“打印”按鈕的時候所出現的頁面,其地址可能是:http://www.dnnworkflow.cn/Demos/申請流程/tabid/55/mid/374/dnnprintmode /true/Default.aspx?SkinSrc=[G]Skins/_default/No+Skin&ContainerSrc= [G]Containers/_default/No+Container,注意其中Default.aspx後面的參數,已經指定了當前的頁面不引用皮膚、不引用容器,為什麼我們還要如此麻煩的增加Edit.aspx並且做如此多的設置呢?

答:這個問題問的不錯。實際上,確實是,當我們在Default.aspx後面增加上述的參數的時候,DotNetNuke自動將所有的皮膚、容器全部都去掉了。假設我們開發一個模塊,這個模塊的一個link是在新窗口中打開當前模塊的另外一個控制的話,那麼,是的,得到的效果非常近似於我們前面所做的內容:沒有皮膚、沒有容器,只有內容(這個大家可以自行試驗一下)。但是,有一個問題我相信大家也會注意到,就是,使用這種方式的時候,我們頁面上所設置的所有的CSS都無效了!如果我們需要單獨為我們的頁面定義CSS的話,那樣就不太好了,也就是說,我們的模塊脫離了系統的皮膚,這樣實際上並不好。當然,我們似乎可以通過修改No Skin.ascx文件,使之增加CSS的解析;但是我們又考慮到,Google等搜索引擎比較不喜歡帶有?參數的頁面,所以,這樣的參數,最好是盡量的少;最好是沒有。

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