DNN:在一个模块中使用多个Web用户控件,并在不同页面中显示不同的控件

时间:2013-09-12 04:38:40

标签: c# webforms dotnetnuke dotnetnuke-module

我是DotNetNuke的新手。请温柔。我正在使用“DotNetNuke 6编译模块”模板来构建我的模块。我已经在项目中使用了View.ascx控件,并添加了另一个名为test.ascx的控件。

我的问题是:如何在我添加模块的不同页面中显示不同的不同视图。 (如果可能的话) 例如 显示View.ascx on say default.aspx页面然后在default2.aspx页面上显示test.ascx用户控件?

如果这不可能,那就意味着我需要为每个ascx控件提供不同的visual studio项目。当然没有。

2 个答案:

答案 0 :(得分:13)

天文,

选项1:

你需要去主持人>扩展程序>编辑你的extesion>展开模块定义,然后单击添加控件。

在这里你必须选择你的ascx控件并提供任何字符串的键。假设您提供了密钥test,您选择了用户控件并选择了控件类型为view并保存了它。

现在从视图中您可以使用以下代码导航到新添加的控件: DotNetNuke.Common.Globals.NavigateUrl(TabId,"test","mid="+ModuleID);

这将重定向页面并使用test.ascx加载您的页面。

如果要在默认情况下显示view.ascx并希望在某些操作时切换视图并显示test.ascx,则可以使用此类选项。这里的缺点是,当你切换到test.ascx时,添加到页面的所有其他模块将不可见。

选项2:

您必须在模块中创建新定义。为此,请转到主机>扩展程序>编辑您的模块>展开Module Definitoins>单击添加并添加新定义。添加定义后,您可以将test.ascx和视图控件添加到定义中,而无需任何键。

完成上述操作后,如果您再次删除模块并将其添加到页面,则会在页面中显示两个模块。这是两个定义。查看博客模块定义,例如多个定义的工作原理。

如果要从同一模块同时显示多个视图控件,则使用此选项。

我希望这会有所帮助。如果您还有其他问题,请与我们联系。

答案 1 :(得分:10)

这里的派对有点晚了,但如果我理解正确,你想拥有一个具有不同观点的模块。要添加到Prashant的方法,我经常使用2个选项;

1。)多视图

<asp:MultiView ID="myMView" runat="server" ActiveViewIndex="0">
    <asp:View ID="ViewOne" runat="server">

      ...Content 1 here...

    </asp:View>
    <asp:View ID="ViewTwo" runat="server">

      ...Content 2 here...

    </asp:View>  
</asp:MultiView>

在后面的代码中,您可以根据某些条件设置活动视图

if(someCondition)
  myMView.ActiveViewIndex = 0;
else
  myMView.ActiveViewIndex = 1;

2)占位符。这是我的最爱,因为它允许我将每个视图及其代码分开放在自己的控件中。您只需要使用DNN注册一个控件(主控件)。您可以拥有10s,100s,1000s的子控件,并且他们不需要在DNN注册,因为它们将包含在MasterControl.ascx占位符中。 在MasterControl.ascx中,添加

<asp:PlaceHolder ID="myPholder"  runat="server"></asp:PlaceHolder>

按照方法1中的Prashant指令操作,并使用DNN注册MasterControl。在后面的代码中,添加以下内容,

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

只是一种不同的做事方式。祝你好运。