8

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

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

如果这不可能,是否意味着我需要为每个 ascx 控件使用不同的 Visual Studio 项目。肯定不是。

4

2 回答 2

13

天文,

选项1:

您需要转到主机 > 扩展 > 编辑您的扩展 > 扩展模块定义,然后单击添加控制。

在这里,您必须选择您的 ascx 控件并提供任何字符串形式的键。假设您提供了 key test,您选择了用户控件并选择了控件类型view并将其保存。

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

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

当您希望默认显示 view.ascx 并希望在执行某些操作时切换视图并显示 test.ascx 时,可以使用这种选项。这里的缺点是,当您切换到 test.ascx 时,添加到页面的所有其他模块都将不可见。

选项 2:

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

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

当您想从同一模块同时显示多个视图控件时,使用此选项。

我希望这有帮助。如果您还有其他问题,请告诉我。

于 2013-09-12T05:02:35.227 回答
10

在这里聚会有点晚了,但如果我理解正确的话,你想要一个具有不同视图的模块。为了增加 Prashant 的方法,这里有两个我经常使用的选项;

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 注册一个控件(主控件)。您可以拥有 10、100、1000 个子控件,它们不需要向 DNN 注册,因为它们将包含在 MasterControl.ascx 占位符中。在 MasterControl.ascx 中,添加

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

按照 Prashant 在方法 1 中的说明,将 MasterControl 注册到 DNN。在后面的代码中,添加以下内容,

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

只是做事方式不同而已。祝你好运。

于 2013-09-15T03:41:13.833 回答