2012-04-12 30 views
1

我正在研究一個由幾個不同屏幕組成的DotNetNuke模塊,每個模塊都有自己的一組用戶界面交互。我決定通過將每個屏幕放在不同的模塊控制中來處理這個問題。我能找到加載控制的唯一方法是通過給予鏈接網址:我可以渲染一個DotNetNuke模塊的控件,而不會將頁面限制到特定的模塊嗎?

Globals.NavigateURL(Constants.LicenseDetailControl, "clientId=" + _clientId, "licenseId=" + data.Id, "mid=" + this.ModuleId); 

不幸的是,這限制了該頁面只呈現這個特定的模塊,由於mid=xxx查詢參數。但是,如果我不提供模塊ID參數,那麼我的控件根本不會呈現,並且頁面爲空。

是否有任何方法來呈現特定的控件而不強制頁面只顯示一個模塊?

+0

你見過任何其他的DNN模塊嗎?我個人沒有,但我認爲你可以使用ajax做一些事情,並重新加載你的模塊的一部分(如果我正確地理解了這個問題)。 – 2012-04-12 13:16:39

+0

不是真的,但我對DNN相對來說比較新,我可能不得不重新組織我的模塊來使用一個控件,但是動態地在主控件上加載ascx來模仿它,但是如果可能,我想避免這種情況。 – KallDrexx 2012-04-12 13:19:39

+0

你希望模塊的不同部分可以在不同的頁面上展示,或者您希望所有內容都可以在一個頁面上看到嗎? – 2012-04-13 04:19:03

回答

2

那麼,這個答案並不像你希望的那麼容易。你所看到的情況就是所謂的「模塊隔離」,從框架的角度來看,沒有真正的解決方法。

但是,您有幾個選項可以讓您在模塊中實現預期效果。

  1. 在您的主視圖中,根據您傳遞和處理的查詢字符串值,動態地將實際視圖加載到PlaceHolder中。
  2. 在您的主視圖控件中,每個視圖都有面板,並根據需要通過參數
  3. 顯示/隱藏它們在您的主視圖控件中爲每個視圖添加子控件。在這裏,您可以根據需要啓用/禁用項目和視圖狀態,以處理視圖,再次處理參數。

就我個人而言,我會選擇1或3.一個很好,最乾淨,但我發現一些控件有動態注入的問題。選項3是我的首選,否則,我可以禁用所有控件的視圖狀態,而不是渲染,以減少頁面大小,否則會臃腫2.

+0

我決定使用#1,從長遠來看,這似乎更容易管理。 ! – KallDrexx 2012-04-13 20:50:39

3

是否有任何方法來呈現特定控件而不強制該頁面只顯示一個模塊?

否是答案。

通過指定ctl類型和模塊Id重新展示特定的控件,它通常用於編輯和管理模塊,並且它們專門從頁面中排除其他模塊。

由於Mitchel已經回答,您必須自己動態加載。還有其他模塊可以做到這一點,您可以複製模式。許多Ventrian模塊使用他們自己的Url規範來加載不同的控件(這意味着不使用Url中的/ ctl/xx和/ mid/yy,而是使用自己的定義替換它,如'view = x')。

但是,您還可以查看將模塊分佈在不同的頁面上,以便一個DNN頁面具有「列表」,另一個具有「視圖」。這給出了一組更合理的Url(想象一下許可證列表頁面稱爲/ licenses,然後是許可證詳細信息頁面,稱爲/ license/licenceId/xx)。它還允許在整個場地使用模塊更靈活。但它確實使得安裝不那麼直觀,因爲它只是在一個頁面上轉儲所有模塊。

我寫了一篇關於這個話題的博客文章,試圖解釋它是如何融合在一起的。它比較老,但仍然相關,可能會提供更多信息。或者,正如另一位評論者已經發布的,只是做了完整的內容AJAX顯示。

相關問題