DNN 5-カスタムモジュールのネストされたユーザーコントロールから現在のModuleIdを取得できない
-
22-07-2019 - |
質問
DNN 5のカスタムモジュールを作成していますが、「管理」が必要です。モジュール内のすべてのコントロールにあるリンク。 PortalModuleBaseを継承する新しいUserControl(" ManagerLink")を作成し、そのコントロールにリンクを配置して、そのコントロールをすべてのメインコントロールにドロップしました。
問題は、" ManagerLink"でModuleIdとTabIdが常に-1であるということです。ネストされたコントロール。 PortalIdは正常に機能し、PortalSettings.ActiveTab.TabIDを実行することでTabIdを取得できます。
-
「ManagerLink」からModuleIdとTabIdを取得できないのはなぜですか。コントロール、PortalModuleBaseから継承しますか?
-
ModuleId(PortalSettings.ActiveTab.TabIDと同等)を取得する代替方法はありますか
2014年の更新:
別の回答を見ましたが、元の回答よりもはるかに優れています(そしてそれを受け入れました)。
DNN 6以前を使用している場合は、 ModuleBase
を PortalModuleBase
解決
@ roman-mの回答を使用して2セントを追加し、それを拡張したかった
ネストされたコントロール自体で次のようにできました:
//fires first in the sequence, calling initialise components
override protected void OnInit(EventArgs e)
{
InitializeComponent();
base.OnInit(e);
}
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
//this binds a handler to the parent's init event
this.Parent.Init += new EventHandler(this.Parent_Init);
}
//the handler gets called, at this point we can cast the parent as a module base
//and load the configuration and resource file into the nested control
private void Parent_Init(object sender, System.EventArgs e)
{
this.ModuleConfiguration = ((ModuleBase)this.Parent).ModuleConfiguration;
this.LocalResourceFile = ((ModuleBase)this.Parent).LocalResourceFile;
}
これは、ネストされたコントロールの Page_Load
イベントで、構成とローカルリソースファイルがすでに手元にあることを意味します。
また、子コントロールを使用するすべての親コントロールで構成およびローカルリソースファイルを読み込む必要がないことも意味します。
これは、親がもちろんModuleBaseタイプの場合にのみ機能します
さらに具体的には、これはバージョン7.00.06で機能します
他のヒント
William Severance from DNNフォーラムがこの質問に答えてくれました。ここにも答えを投稿します。
子コントロールはPortalModuleBaseを継承するため、 次のPage_Loadハンドラで 親コントロール
注:ManagerLinkは、子コントロールへの参照と見なされます
VB.NET:
With ManagerLink
.ModuleConfiguration = Me.ModuleConfiguration
.LocalResourceFile = Me.LocalResourceFile
End With
C#:
protected void Page_Load(System.Object sender, System.EventArgs e)
{
ManagerLink.ModuleConfiguration = this.ModuleConfiguration;
ManagerLink.LocalResourceFile = this.LocalResourceFile
}
上記により、子コントロールは、ローカライズに親のModuleConfiguration(ModuleIdを含む)およびLocalResourceFileを使用できます。