1
votes

I am a newbie programming modules for dotnetnuke.

At this moment I use only the view.ascx for displaying my logic. I need to display different views based on the login user and the attach user role. I can do it by setting some of the controls visible and non visible but I think it is not the right way and make the code unnecessary complex.

I came across an earlier question in stackoverflow (DNN: Using multiple web user controls in one module and showing different controls in different pages)

But have still some questions:

I have to add a new webformuser control in vs2013 when I want to design a new view in a seperate ascx? I think the solution mentioned in the link using a placeholder will solve my question. But which steps do I need to transform my current solution with "view.ascx" to a solution with a placeholder?

I need to create first a new webusercontrol and named it "MasterControl.ascx" and put the placeholder control in it? I need to create additionally for each view a new webusercontrol? What about the view.ascx? I dont need it anymore? What is the controlpath? Is it the path where the user control reside?

Is this the following layout:

MasterControl.ascx calling userview1.ascx userview2.ascx ... userviewk.ascx

How to register "MasterControl.ascx"? I dont see "add control" in my current module when edited? I used DNN 7.2.x with the Cristoc addin.

I have to replace child1 wirh userview1 etc? When I supply the condition the corresponding userview.ascx will be displayed?

I a am a complete newbie so I need a step by step "cookbook recipe" how to convert my current module with, only using, a one "view.ascx" approach with a more flexible multiple ascx solution.

Thanks in advance,

Regards,

Henk

a copy of the code mentioned in the above link.

   string childControl;
  switch (condition)
  {
   case "condition1":
    childControl = ControlPath + Child1.ascx";
    break;
   case "condition2":
    childControl = ControlPath + Child2.ascx";
    break;      
  ...more conditions...
  }
  PortalModuleBase objModule = (PortalModuleBase)this.LoadControl(childControl);
  if ((objModule != null))
  {
   myPholder.Controls.Clear();
   objModule.ModuleConfiguration = this.ModuleConfiguration;
   myPholder.Controls.Add(objModule);
  }
1

1 Answers

-1
votes

If you only have a few things to hide or show then you could make use of <asp:Panels>. You could the set the visibility depending on a calculated property or some other logic; for instance, I have used the IsSuperUser property.

ASCX file:

<asp:Panel id="pnlSomeDeclarativeCode" runat=server>
    <h1>Hide or show me</h1>
</asp:Panel>

In your codebehind file:

private Initialise()
{
    pnlSomeDeclarativeCode.Visabilty = UserInfo.IsSuperUser;
}