2012-03-08 21 views
5

我正在開發一個DNN模塊,我想在我的ContentPane的頂部顯示一條信息消息,而不是在實際模塊的上方。我發現DotNetNuke.UI.Skins.Skin.AddPageMessage()應該做的事情。雖然我沒有得到我想要的行爲,但該消息根本不會顯示。如何使用Skin.AddPageMes​​sage()方法?

該方法很少有重載,一組接受Page對象,另一組接受Skin對象。

public static void AddPageMessage(Page page, string heading, string message, ModuleMessage.ModuleMessageType moduleMessageType) 

public static void AddPageMessage(Skin skin, string heading, string message, ModuleMessage.ModuleMessageType moduleMessageType) 

我也看看到DNN源,結果發現,最終他們實際上正在使用相同的private static AddPageMessage(...)方法,它只是看起來對所提供的控制內的contentPane並增加了一個新的ModuleMessage到收集其控制。

作爲PageSkin參數我應該通過什麼才能使此correcty工作?

謝謝...

回答

4

私人AddPageMes​​sage方法需要相當曖昧「控制」作爲第一個參數。我相信需要成爲當前的Skin,因爲它爲ContentPane提供了FindControl。

做這樣的事情應該讓你對當前皮膚的引用:

var skin = Skin.GetSkin((PageBase)this.Page); 
Skin.AddPageMessage(skin, "Header", "Message", ModuleMessageType.GreenSuccess); 
+0

感謝您的回覆,我已經嘗試了您之前描述的方式,但不幸的是它似乎不起作用。我已經用默認皮膚和自定義皮膚嘗試了它。在調試dnn源代碼時,FindControl實際上找到了ContentPane,但其Controls集合是空的(不應該是,因爲至少應該有我的模塊),並且在向集合添加新的ModuleMessage對象之後什麼都沒有發生,並且沒有消息顯示在頁面上。任何想法? – 2012-03-12 08:18:12

+0

嗯,我看到同樣的事情。奇怪的。我不完全確定目前爲什麼會發生這種情況。 – 2012-03-13 18:18:36

+0

還有一些證據表明該方法正在增加「DNN Pro Trial」消息。但是當我自己調用它時,它不會顯示在UI中,即使它找到了ContentPane ... – 2012-03-13 18:28:41

1

爲什麼消息顯示不出來的原因是,你在modulecontrols的controlssetting開啓「啓用部分渲染」 。

如果您使用的是AJAX(如果將部分渲染設置爲true,則發生這種情況),DNN模塊消息將從DNN itselfe關閉。

它足夠了,如果你已經在你的頁面上只有一個控件上的局部渲染(不必是你的控制點)。 DNN會將整個頁面封裝到ajax腳本管理器中,並且消息不再工作。

*編輯26.04.2012 10:45:

您可以通過執行以下代碼例如,在你的Page_Load獲取當前的ScriptManager()。如果管理器爲空,則不啓用ajax,並且應該使用模塊消息。如果bIsAjaxEnabled爲true,則禁用模塊消息。

ScriptManager manager = AJAX.GetScriptManager(Page); 
if (manager != null) 
{ 
    bool bIsAjaxEnabled = manager.SupportsPartialRendering; 
} 
+0

如何確保頁面被ajax腳本管理器包裝?我只有一個帶有一個模塊的簡單頁面,沒有模塊控件已啓用部分呈現,好像沒有ajax腳本管理器(已檢查頁面源代碼),但頁面消息仍未顯示。任何線索? – 2012-04-25 18:22:59

+0

我一直在玩它,但仍然沒有成功:(在檢查SupportsPartialRendering後,確實如此...我也做過的是,我查看了DNN源代碼,發現ScriptManager被添加到每個頁面(作爲DotNetNuke.Framework.PageBase.OnInit()方法中的一個方法調用,其中ScriptManager被添加到每個頁面) 。我忽略了什麼? – 2012-04-26 18:07:00

+0

是的,scriptmanager正被添加到每個頁面。但是如果啓用「SupportPartialRendering」DNN(版本6)將用telerik ajaxScriptmanager替換ScriptManager。從那裏啓用AJAX,這意味着模塊消息不再工作。 只需嘗試在新創建的頁面上進行完全空白控件。如果單擊,則將一個Button放置到顯示模塊消息的模塊上。通常它應該工作。 – noonecares 2012-04-27 06:51:32