DNN 5-カスタムモジュールのネストされたユーザーコントロールから現在のModuleIdを取得できない

StackOverflow https://stackoverflow.com/questions/644748

質問

DNN 5のカスタムモジュールを作成していますが、「管理」が必要です。モジュール内のすべてのコントロールにあるリンク。 PortalModuleBaseを継承する新しいUserControl(" ManagerLink")を作成し、そのコントロールにリンクを配置して、そのコントロールをすべてのメインコントロールにドロップしました。

問題は、" ManagerLink"でModuleIdとTabIdが常に-1であるということです。ネストされたコントロール。 PortalIdは正常に機能し、PortalSettings.ActiveTab.TabIDを実行することでTabIdを取得できます。

  1. 「ManagerLink」からModuleIdとTabIdを取得できないのはなぜですか。コントロール、PortalModuleBaseから継承しますか?

  2. 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を使用できます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top