4

我正在开发一个 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参数来使这个正确的工作?

谢谢 ...

4

2 回答 2

4

私有 AddPageMes​​sage 方法将一个相当模糊的“Control”作为第一个参数。我相信这需要是当前的皮肤,因为它为 ContentPane 提供了 FindControl。

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

var skin = Skin.GetSkin((PageBase)this.Page);
Skin.AddPageMessage(skin, "Header", "Message", ModuleMessageType.GreenSuccess);
于 2012-03-10T02:53:03.407 回答
1

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

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

如果您只在页面上的 1 个控件(不必是您从中操作的控件)上打开部分渲染就足够了。DNN 会将整个页面包装到 ajax 脚本管理器中,并且消息不再起作用。

*编辑 26.04.2012 10:45:

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

ScriptManager manager = AJAX.GetScriptManager(Page);
if (manager != null)
{
   bool bIsAjaxEnabled = manager.SupportsPartialRendering;
}
于 2012-04-24T10:01:28.503 回答