View 在模块中更改视图会使我进入管理员皮肤
这个问题可能是DotNetNuke一生中被讨论最多的问题,但我要在StackOverflow中问这个问题,因为我需要一个答案,一个真正好的答案,不会让我看起来像另一个人。提前感谢所有DNN专家 我已经研究了很多方法,通过设置SkinSrc(这很有用),以及阅读Default.aspx的代码,我看到了Michael Washington的解决方案(面板、多视图等)和Will(Strohl)在DotNetNuke的个性化引擎上发表的博文,我仍然面临这样一个问题:调用EditUrl()/NavigateUrl()会使我看到一个在管理员皮肤中只有一个模块的页面,或者一个没有模块的页面 具体版本为DotNetNuke 6.0.1(DNN)。除了我希望按顺序浏览的主视图外,本模块还有4个其他视图。例如 开始结帐->收货明细->确认订单 你找到解决办法了吗 我想实现 1) 模块与周围的其他模块一起加载。无模块隔离 2) 模块中未预加载的视图(例如每个视图中的页面加载)在模块加载时被调用View 在模块中更改视图会使我进入管理员皮肤,view,module,dotnetnuke,View,Module,Dotnetnuke,这个问题可能是DotNetNuke一生中被讨论最多的问题,但我要在StackOverflow中问这个问题,因为我需要一个答案,一个真正好的答案,不会让我看起来像另一个人。提前感谢所有DNN专家 我已经研究了很多方法,通过设置SkinSrc(这很有用),以及阅读Default.aspx的代码,我看到了Michael Washington的解决方案(面板、多视图等)和Will(Strohl)在DotNetNuke的个性化引擎上发表的博文,我仍然面临这样一个问题:调用EditUrl()/Navigat
救命啊 假设您以模块开发人员的身份询问此问题,解决方案是不使用DNN的机制来指定控件。因此,您不能在NavigateURL调用中使用EditUrl或指定ControlKey(这两个调用都会在URL中生成“ctl=mycontrol”)。相反,您需要让模块根据查询字符串参数显示各种控件。因此,您的模块中通常会有一个控件,其主要目的是基于查询字符串动态加载其他控件。例如:
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的大多数高级模块都是这样做的,因此有大量的示例代码。我猜一些核心模块也有类似的功能。我改编了上面的代码。假设您作为模块开发人员询问此问题,解决方案是不使用DNN的机制来指定控件。因此,您不能在NavigateURL调用中使用EditUrl或指定ControlKey(这两个调用都会在URL中生成“ctl=mycontrol”)。相反,您需要让模块根据查询字符串参数显示各种控件。因此,您的模块中通常会有一个控件,其主要目的是基于查询字符串动态加载其他控件。例如:
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的大多数高级模块都是这样做的,因此有大量的示例代码。我猜一些核心模块也有类似的功能。我改编了上面的代码。谢谢你,戴夫!我想没有更好的方法可以避免这样做。我最终决定采用的方法是1)在签出过程中重新使用作为页面的控件视图,将每个页面加载事件更改为一个公共方法,该方法将在需要视图时执行。这将防止在我不希望加载的情况下加载每个页面。每个页面都实现了保护,因此不希望在加载第一个页面时运行页面加载。2) 转到多视图并在标题中预先注册控件。在母版页上放置控件。3) 创建了一个PageChange事件,该事件将在从控件视图触发时更改页面。感谢Dave!我想没有更好的方法可以避免这样做。我最终决定采用的方法是1)在签出过程中重新使用作为页面的控件视图,将每个页面加载事件更改为一个公共方法,该方法将在需要视图时执行。这将防止在我不希望加载的情况下加载每个页面。每个页面都实现了保护,因此不希望在加载第一个页面时运行页面加载。2) 转到多视图并在标题中预先注册控件。在母版页上放置控件。3) 创建了一个PageChange事件,该事件在从控件视图激发时将更改页面。