Как использовать метод Skin.AddPageMessage ()? - PullRequest
4 голосов
/ 08 марта 2012

Я разрабатываю модуль 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, чтобы это исправление работало?

Спасибо ...

Ответы [ 2 ]

4 голосов
/ 10 марта 2012

Закрытый метод AddPageMessage принимает довольно неоднозначный «Control» в качестве первого параметра.Я считаю, что это должен быть текущий скин, так как он выполняет FindControl для ContentPane.

Если сделать что-то подобное, вы получите ссылку на текущий скин:

var skin = Skin.GetSkin((PageBase)this.Page);
Skin.AddPageMessage(skin, "Header", "Message", ModuleMessageType.GreenSuccess);
1 голос
/ 24 апреля 2012

причина, по которой сообщения не отображаются, заключается в том, что вы включили «включить частичный рендеринг» в настройках управления для control-модулей.

Если вы используете AJAX (это происходит, если вы устанавливаете частичный рендерингtrue) сообщения модуля DNN отключены от DNN itselfe.

Этого достаточно, если вы включили частичный рендеринг только на 1 элементе управления (не обязательно должен быть вашим элементом управления, с которого вы действуете) на своей странице.DNN обернет всю страницу в менеджер сценариев ajax, и сообщения больше не будут работать.

* РЕДАКТИРОВАТЬ 26.04.2012 10: 45:

Вы можете получить текущий ScriptManager, выполнив следующий код дляпример у вас Page_Load ().Если менеджер имеет значение null, у вас не включен ajax, и сообщения модуля должны работать.Если bIsAjaxEnabled равно true, сообщения модуля отключены.

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