FYI: In case someone else runs across this same issue, I thought I would post it here.
I recently upgraded from 3.2.x to 4.3.5. This resulted in a module breaking on adding items to the action menu. I have a module which loads another module which also implements IActionable. Before the upgrade, both action items were getting added fine. After the upgrade, only the first item was being loaded, the other was throwing an error:
DotNetNuke.Services.Exceptions.ModuleLoadException: Object reference not set to an instance of an object. ---> System.NullReferenceException: Object reference not set to an instance of an object. at DotNetNuke.NavigationControl.SolpartMenuNavigationProvider.Bind(DNNNodeCollection objNodes) at DotNetNuke.UI.WebControls.SolPartActions.BindMenu(DNNNodeCollection objNodes) at DotNetNuke.UI.WebControls.SolPartActions.Page_PreRender(Object sender, EventArgs e) --- End of inner exception stack trace
To make a long story short, the call to GetNextActionID was not incrementing between calls from the loaded control and the parent control and so an error would be thrown. The work around seems to be incrementing the parent's id by the number of action items returned from the child control.
Code:
public DotNetNuke.Entities.Modules.Actions.ModuleActionCollection ModuleActions {
get {
int childActionItems = 0;
DotNetNuke.Entities.Modules.Actions.ModuleActionCollection Actions = new DotNetNuke.Entities.Modules.Actions.ModuleActionCollection();
if(_AdditionalFunctionalityControl != null) {
try {
DotNetNuke.Entities.Modules.Actions.ModuleActionCollection childActions = ((IActionable)_AdditionalFunctionalityControl).ModuleActions;
childActionItems = childActions.Count;
for(int i=0; i < childActionItems; i++) {
Actions.Add(childActions[i]);
}
} catch {}
}
Actions.Add(GetNextActionID() + childActionItems, "Reports", "Reports", "PortalID=" + this.PortalId.ToString(), "", EditUrl("Reports"), false, DotNetNuke.Security.SecurityAccessLevel.Edit, true, false);
return Actions;
}
}