在dotnetnuke中显示多个ascx

时间:2014-08-03 21:24:31

标签: dotnetnuke ascx

我是dotnetnuke的新手编程模块。

此时我只使用view.ascx来显示我的逻辑。 我需要根据登录用户和附加用户角色显示不同的视图。我可以通过将一些控件设置为可见且不可见来实现,但我认为这不是正确的方法,并且使代码不必要复杂。

我在stackoverflow(DNN: Using multiple web user controls in one module and showing different controls in different pages

中遇到了一个早期的问题

但仍有一些问题:

当我想在单独的ascx中设计一个新视图时,我必须在vs2013中添加一个新的webformuser控件? 我认为使用占位符的链接中提到的解决方案将解决我的问题。但是,我需要将使用“view.ascx”的当前解决方案转换为具有占位符的解决方案?

我需要首先创建一个新的webusercontrol并将其命名为“MasterControl.ascx”并将占位符控件放入其中? 我需要为每个视图另外创建一个新的webusercontrol吗? view.ascx怎么样?我不再需要了吗?什么是控制路径?它是用户控件所在的路径吗?

这是以下布局:

MasterControl.ascx通话   userview1.ascx   userview2.ascx ...   userviewk.ascx

如何注册“MasterControl.ascx”?编辑时,我在当前模块中看不到“添加控件”?我使用DNN 7.2.x和Cristoc插件。

我必须替换child1 wirh userview1等?当我提供条件时,将显示相应的userview.ascx?

我是一个完整的新手所以我需要一步一步“食谱配方”如何使用一种“view.ascx”方法转换我当前的模块,使用更灵活的多个ascx解决方案。

提前致谢,

此致

亨克

上述链接中提到的代码副本。

   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 个答案:

答案 0 :(得分:-1)

如果您只隐藏或展示一些内容,那么您可以使用<asp:Panels>。您可以根据计算的属性或其他逻辑设置可见性;例如,我使用了IsSuperUser属性。

ASCX文件:

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

在您的代码隐藏文件中:

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