更改模块中的视图会将我弹出到Admin Skin中

时间:2011-12-05 03:44:07

标签: view module dotnetnuke

这个问题可能是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

帮助!

1 个答案:

答案 0 :(得分:4)

假设您要求此作为模块开发人员,解决方案是不使用DNN的机制来指定控件。因此,您无法使用EditUrl或在NavigateURL调用中指定ControlKey(它们都在URL中生成“ctl = mycontrol”)。相反,您需要让模块根据Query String参数显示各种控件。因此,您通常会在模块中拥有一个控件,其主要目的是根据查询字符串动态加载其他控件。所以,例如:

  1. 您将从列出项目的控件开始。您将为每个项目提供“立即购买”按钮。可以通过调用
  2. 生成每个项目的超链接

    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改编了上面的代码。