这个问题可能是DotNetNuke所有生命中最受关注的问题,但我会在StackOverflow中提出这个问题,因为我需要一个答案,一个非常好的答案,不会让我看起来相反。在此先感谢所有DNN专家。
我已经研究了很多让我这样做的方法,我通过设置SkinSrc看看Michael Washington的解决方案(Panels,MultiViews,...)和Will的(Strohl)博客在DotNetNuke的个性化引擎上发布,这很有用,以及通过Default.aspx的代码阅读,这给了我更多的见解,然而,我仍然面临调用EditUrl()/ NavigateUrl()将我带到管理皮肤或页面中具有单个模块的页面的问题分别没什么。
具体版本是DotNetNuke 6.0.1(DNN)。除了主视图之外,本模块还有4个其他视图,我希望按顺序浏览。例如 开始结帐 - >交付详情的收集 - >确认订单
您找到了解决方案吗?
我想实现 1)模块加载周围的其他模块。没有模块隔离 2)模块中没有预加载的视图,例如在模块加载时调用每个视图中的Page_Load
帮助!
答案 0 :(得分:4)
假设您要求此作为模块开发人员,解决方案是不使用DNN的机制来指定控件。因此,您无法使用EditUrl或在NavigateURL调用中指定ControlKey(它们都在URL中生成“ctl = mycontrol”)。相反,您需要让模块根据Query String参数显示各种控件。因此,您通常会在模块中拥有一个控件,其主要目的是根据查询字符串动态加载其他控件。所以,例如:
NavigateURL(TabID, "", "View=BeginCheckout", "itemid=" & id, "mid=" & mid)
2.。)在处理程序控件的页面加载中,它查看是否为“View”Querystring参数指定了任何内容。如果不是,则显示列表控件,如果是,则显示相应的控件。
Dim controlPath As String
Dim path as String = "~/DesktopModules/MyModule/Controls"
Select Case Request("View")
Case "BeginCheckout"
ControlPath = path + "BeginCheckout.ascx"
Case "DeliveryDetails"
ControlPath = path + "DeliveryDetails.ascx"
Case "ConfirmOrder"
ControlPath = path + "ConfirmOrder.ascx"
Case Else
ControlPath = path + "ItemList.aspx"
End Select
If System.IO.File.Exists(Request.MapPath(controlPath)) Then
placeholder.LoadControl(controlPath)
Else
Throw New Exception("Unable to load selected template. Please go into module settings and select a list and details template.")
End If
DNN的大多数高级模块都沿着这些方向做了一些事情,所以那里有大量的示例代码。我猜一些核心模块会做类似的事情。我从Efficon's Articles module for DotNetNuke改编了上面的代码。