我正在开发一个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
参数传递什么才能使此相关工作正常进行?
谢谢...
答案 0 :(得分:4)
私有AddPageMessage方法将一个相当模糊的“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;
}