1

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);
  }
Community
  • 1
  • 1

1 Answers1

-1

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;
}
David Gorsline
  • 4,933
  • 12
  • 31
  • 36
lukejkw
  • 1
  • 1
  • Thanks, but It is more than a few controls, more different screens. I really need to separate the form in multiple ascx's – user3904681 Aug 06 '14 at 08:32
  • In that case, you could create multiple module controls with unique keys to your extension, each pointing to their own .ascx file. You can then navigate to each using Globals.NavigateUrl() or EditUrl() depending on your needs. – lukejkw Nov 17 '14 at 10:14