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.

  1. Perché non riesco a ottenere ModuleId e TabId da " ManagerLink " controllo, anche se eredita da PortalModuleBase?

  2. 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

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top