DNN 5 - Impossibile ottenere ModuleId corrente dal controllo utente nidificato nel modulo personalizzato
-
22-07-2019 - |
Domanda
Sto scrivendo un modulo personalizzato per DNN 5 e ho bisogno di un " Gestisci " collegamento per essere su ogni controllo nel modulo. Ho creato un nuovo UserControl (" ManagerLink ") che eredita da PortalModuleBase, ho inserito il mio link in quel controllo e ho lasciato cadere quel controllo su TUTTI I MIEI COMANDI PRINCIPALI.
Il problema è che ModuleId e TabId sono sempre -1 in " ManagerLink " controllo annidato. PortalId funziona bene e posso ottenere un TabId facendo PortalSettings.ActiveTab.TabID.
-
Perché non riesco a ottenere ModuleId e TabId da " ManagerLink " controllo, anche se eredita da PortalModuleBase?
-
Esiste un metodo alternativo per ottenere ModuleId (equivalente di PortalSettings.ActiveTab.TabID)
AGGIORNAMENTO 2014:
Ho appena visto un'altra risposta molto migliore dell'originale (e l'ho accettata).
Se si utilizza DNN 6 e precedenti, sostituire ModuleBase
con PortalModuleBase
Soluzione
Volevo solo aggiungere i miei 2 centesimi qui, usando la risposta di @ roman-m e estendendoci sopra,
Sono stato in grado di farlo nel controllo annidato stesso in questo modo:
//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;
}
Ciò significa che nell'evento Page_Load
del controllo nidificato avrà già a portata di mano la configurazione e il file di risorse locali.
Significa anche che non è necessario caricare la configurazione e il file di risorse locali su ogni controllo padre che utilizza il controllo figlio.
Funzionerà solo quando il genitore è di tipo ModuleBase ovviamente
E per essere ancora più specifici, funziona nella versione 7.00.06
Altri suggerimenti
William Severance da DNN forum ha risposto a questa domanda per me, posterò anche qui la risposta.
Poiché il controllo figlio eredita da PortalModuleBase, farei il seguente nel gestore di Page_Load di il controllo principale
Nota: si presume che ManagerLink sia un riferimento al controllo figlio
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
}
Quanto sopra consente al controllo figlio di utilizzare ModuleConfiguration del genitore (che includerà ModuleId) e LocalResourceFile per qualsiasi localizzazione.