我正在开发一个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参数的形式传递什么才能使这种正确性正常工作?
谢谢..。
发布于 2012-03-10 10:53:03
私有的AddPageMessage方法接受一个相当模糊的"Control“作为第一个参数。我认为这需要是当前的皮肤,因为它是ContentPane的FindControl。
这样做应该会让您获得对当前皮肤的引用:
var skin = Skin.GetSkin((PageBase)this.Page);
Skin.AddPageMessage(skin, "Header", "Message", ModuleMessageType.GreenSuccess);发布于 2012-04-24 18:01:29
消息没有显示的原因是您在模块控件的控件设置中打开了“启用部分渲染”。
如果您正在使用AJAX (如果您将部分呈现设置为true,则会发生这种情况),DNN模块消息将从DNN本身关闭。
如果你只在页面上的一个控件上打开了部分渲染就足够了(不需要是你的控件,你是从哪里操作的)。DNN会将整个页面打包到ajax脚本管理器中,消息将不再起作用。
*编辑26.04.2012 10:45:
例如,您可以通过在Page_Load()中执行以下代码来获取当前的ScriptManager。如果管理器为空,则说明您没有启用ajax,并且modulemessages应该可以工作。如果bIsAjaxEnabled为true,则模块消息被禁用。
ScriptManager manager = AJAX.GetScriptManager(Page);
if (manager != null)
{
bool bIsAjaxEnabled = manager.SupportsPartialRendering;
}https://stackoverflow.com/questions/9623935
复制相似问题