如何使用Skin.AddPageMes​​sage()方法?

时间:2012-03-08 19:53:53

标签: c# dotnetnuke dotnetnuke-module

我正在开发一个DNN模块,我想在我的ContentPane顶部显示一条信息消息,而不是在实际模块之上。我发现DotNetNuke.UI.Skins.Skin.AddPageMessage()应该做的事情。我没有得到我想要的行为,消息根本不会显示。

此方法的重载很少,一组接受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并添加一个新的{{1到它的控件集合。

我应该以{{1​​}}或ModuleMessage参数传递什么才能使此相关工作正常进行?

谢谢...

2 个答案:

答案 0 :(得分:4)

私有AddPageMes​​sage方法将一个相当模糊的“Control”作为第一个参数。我认为它需要是当前的Skin,因为它是一个FindControl for ContentPane。

做这样的事情会让你引用当前的皮肤:

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

答案 1 :(得分:1)

消息未显示的原因是您在modulecontrols的控件设置中启用了“启用部分渲染”。

如果您使用的是AJAX(如果将部分渲染设置为true,则会发生这种情况)DNN模块消息将从DNN itselfe关闭。

如果您在页面上仅在1个控件上打开了部分渲染(不一定是您控制的位置),那就足够了。 DNN将整个页面包装到ajax脚本管理器中,消息不再起作用。

*编辑26.04.2012 10:45:

您可以通过在Page_Load()中执行以下代码来获取当前的ScriptManager。如果管理器为null,则表示您没有启用ajax,并且modulemessages应该可以正常工作。如果bIsAjaxEnabled为true,则禁用模块消息。

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