View 在模块中更改视图会使我进入管理员皮肤

View 在模块中更改视图会使我进入管理员皮肤,view,module,dotnetnuke,View,Module,Dotnetnuke,这个问题可能是DotNetNuke一生中被讨论最多的问题,但我要在StackOverflow中问这个问题,因为我需要一个答案,一个真正好的答案,不会让我看起来像另一个人。提前感谢所有DNN专家 我已经研究了很多方法,通过设置SkinSrc(这很有用),以及阅读Default.aspx的代码,我看到了Michael Washington的解决方案(面板、多视图等)和Will(Strohl)在DotNetNuke的个性化引擎上发表的博文,我仍然面临这样一个问题:调用EditUrl()/Navigat

这个问题可能是DotNetNuke一生中被讨论最多的问题,但我要在StackOverflow中问这个问题,因为我需要一个答案,一个真正好的答案,不会让我看起来像另一个人。提前感谢所有DNN专家

我已经研究了很多方法,通过设置SkinSrc(这很有用),以及阅读Default.aspx的代码,我看到了Michael Washington的解决方案(面板、多视图等)和Will(Strohl)在DotNetNuke的个性化引擎上发表的博文,我仍然面临这样一个问题:调用EditUrl()/NavigateUrl()会使我看到一个在管理员皮肤中只有一个模块的页面,或者一个没有模块的页面

具体版本为DotNetNuke 6.0.1(DNN)。除了我希望按顺序浏览的主视图外,本模块还有4个其他视图。例如 开始结帐->收货明细->确认订单

你找到解决办法了吗

我想实现 1) 模块与周围的其他模块一起加载。无模块隔离 2) 模块中未预加载的视图(例如每个视图中的页面加载)在模块加载时被调用


救命啊

假设您以模块开发人员的身份询问此问题,解决方案是不使用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事件,该事件在从控件视图激发时将更改页面。