4

DNN モジュールを開発しており、実際のモジュールの上ではなく、ContentPane の上部に情報メッセージを表示したいと考えています。私はそれDotNetNuke.UI.Skins.Skin.AddPageMessage()がちょうどそのことをするべきであることを発見しました。私が望む動作が得られませんが、メッセージはまったく表示されません。

このメソッドにはいくつかのオーバーロードがあり、1 つのグループはPageオブジェクトを受け入れ、もう 1 つのグループはオブジェクトを受け取り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パラメーターとして何を渡す必要がありますか?

ありがとう ...

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 を取得できます。マネージャーが null の場合、ajax が有効になっておらず、モジュール メッセージが機能するはずです。bIsAjaxEnabled が true の場合、モジュール メッセージは無効になります。

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