DNN 5 - Não é possível obter o ModuleID atual do controle de usuário aninhado no módulo personalizado

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

Pergunta

Estou escrevendo um módulo personalizado para o DNN 5 e preciso de um link "Gerenciar" para estar em todos os controle do módulo. Criei um novo UserControl ("Gerenciador") que herda do PortalmoduleBase, coloquei meu link nesse controle e soltei esse controle em todos os meus controles principais.

O problema é que o ModuleID e o Tabid estão sempre -1 no controle aninhado "Gerenciador". O PortalId funciona muito bem, e eu posso obter um Tabid fazendo portalsettings.activeTab.tabid.

  1. Por que não consigo obter o ModuleId e o Tabid no controle "Gerenciador", mesmo que ele herde do PortalmoduleBase?

  2. Existe um método alternativo para obter o ModuleId (equivalente a portalsettings.activetab.tabid)

Atualização 2014:

Acabei de ver outra resposta que é muito melhor que o original (e a aceitou).

Se você estiver usando o DNN 6 e anterior, substitua ModuleBase com PortalModuleBase

Foi útil?

Solução

Eu só queria adicionar meus 2 centavos aqui, usando a resposta de @roman-m e estendendo-se,

Consegui fazer isso no controle aninhado assim:

//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;
}

Isso significa que no Page_Load Evento do controle aninhado, ele já terá o arquivo de configuração e recursos locais em mãos.

Isso também significa que você não precisa carregar a configuração e o arquivo de recursos locais em todos os controles de pai que usa o controle da criança.

Isso só funcionará quando o pai for do tipo ModuleBase, é claro

E para ser ainda mais específico, isso funciona na versão 7.00.06

Outras dicas

William Severance de Fórum DNN Respondeu a este para mim, postarei a resposta aqui também.

Como o controle da criança herda do PortalmoduleBase, eu faria o seguinte no manipulador de Page_load do controle dos pais

Nota: o gerenciador é considerado uma referência ao controle da criança

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
}

O exposto acima permite que o controle da criança use o ModuleConfiguration do pai (que incluirá o ModuleID) e o LocalResourceFile para qualquer localização.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top