如何使用Skin.AddPageMessage()方法

本文关键字:方法 AddPageMessage 何使用 Skin | 更新日期: 2023-09-27 18:27:06

我正在开发一个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,并将新的ModuleMessage添加到其控件的集合中。

我应该传递什么作为PageSkin参数才能使此正确性工作?

谢谢。。。

如何使用Skin.AddPageMessage()方法

私有AddPageMessage方法将一个相当模糊的"Control"作为第一个参数。我认为这需要是当前的皮肤,就像它为ContentPane做FindControl一样。

这样做应该会让你参考当前的皮肤:

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

消息没有显示的原因是您在模块控件的控件设置中启用了"启用部分呈现"。

如果您正在使用AJAX(如果您将部分呈现设置为true,就会发生这种情况),则DNN模块消息将从DNN本身关闭。

如果你只在页面上的一个控件(不必是你的控件)上打开部分渲染就足够了。DNN将把整个页面包装到ajax脚本管理器中,消息不再工作。

*编辑:2012年4月26日10:45:

您可以通过执行以下代码来获得当前的ScriptManager,例如在Page_Load()中。如果管理器为null,那么您没有启用ajax,模块消息应该可以工作。如果bIsAjaxEnabled为true,则模块消息将被禁用。

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