如何使用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
添加到其控件的集合中。
我应该传递什么作为Page
或Skin
参数才能使此正确性工作?
谢谢。。。
私有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;
}