我是DotNetNuke的新手。请温柔。我正在使用“DotNetNuke 6编译模块”模板来构建我的模块。我已经在项目中使用了View.ascx控件,并添加了另一个名为test.ascx的控件。
我的问题是:如何在我添加模块的不同页面中显示不同的不同视图。 (如果可能的话) 例如 显示View.ascx on say default.aspx页面然后在default2.aspx页面上显示test.ascx用户控件?
如果这不可能,那就意味着我需要为每个ascx控件提供不同的visual studio项目。当然没有。
答案 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);
}
只是一种不同的做事方式。祝你好运。