2012-03-08 44 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