usar ejemplo crear control como user-controls dotnetnuke dotnetnuke-module dotnetnuke-5

user-controls - crear - user control c# ejemplo



DNN 5: no se puede obtener el ModuleId actual del control de usuario anidado en el módulo personalizado (2)

William Severance del foro DNN me contestó esta, también publicaré la respuesta aquí.

Como el control secundario hereda de PortalModuleBase, haría lo siguiente en el controlador Page_Load del control principal

Nota: Se supone que ManagerLink es una referencia al control infantil

VB.NET:

With ManagerLink .ModuleConfiguration = Me.ModuleConfiguration .LocalResourceFile = Me.LocalResourceFile End With DO#:

protected void Page_Load(System.Object sender, System.EventArgs e) { ManagerLink.ModuleConfiguration = this.ModuleConfiguration; ManagerLink.LocalResourceFile = this.LocalResourceFile }

Lo anterior le permite al control secundario usar ModuleConfiguration de los padres (que incluirá ModuleId) y LocalResourceFile para cualquier localización.

Estoy escribiendo un módulo personalizado para DNN 5, y necesito un enlace "Administrar" para estar en cada control en el módulo. Creé un nuevo UserControl ("ManagerLink") que hereda de PortalModuleBase, puse mi enlace en ese control y dejé ese control en TODOS MIS CONTROLES PRINCIPALES.

El problema es que ModuleId y TabId son siempre -1 en el control anidado "ManagerLink". PortalId funciona bien y puedo obtener una TabId haciendo PortalSettings.ActiveTab.TabID.

  1. ¿Por qué no puedo obtener ModuleId y TabId desde el control "ManagerLink", aunque herede de PortalModuleBase?

  2. ¿Hay algún método alternativo para obtener ModuleId (equivalente a PortalSettings.ActiveTab.TabID)?

ACTUALIZACIÓN 2014:

Acabo de ver otra respuesta que es mucho mejor que la original (y la acepté).

Si está utilizando DNN 6 y ModuleBase anteriores, reemplace ModuleBase con PortalModuleBase


Solo quería agregar mis 2 centavos aquí, usando la respuesta de @ roman-m y extendiéndolo,

Pude hacerlo en el control anidado mismo así:

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

Esto significa que en el evento Page_Load del control anidado ya tendrá a mano la configuración y el archivo de recursos locales.

También significa que no tiene que cargar la configuración y el archivo de recursos locales en cada control principal que use el control secundario.

Esto solo funcionará cuando el padre sea de tipo ModuleBase por supuesto

Y para ser aún más específico, esto funciona en la versión 7.00.06