向DotNetNuke页面添加请求参数

向DotNetNuke页面添加请求参数,dotnetnuke,Dotnetnuke,我想知道是否有一种简单的方法可以在页眉部分指定一个请求参数(即CategoryID),或者以某种方式关联到一个特定的页面,该页面将被请求提取(“CategoryID”)?或者另一种简单的方法,可以轻松地为Request()拾取的DotNetNuke页面指定请求参数。我们需要不同的页面才能有不同的分类 细节 我们在每一页上都有一个模块。它总是调用Request(“CategoryID”),查看是否为页面定义了一个类别,如果是,它会按该类别过滤其结果列表。通常,在URL中指定CategoryID时使

我想知道是否有一种简单的方法可以在页眉部分指定一个请求参数(即CategoryID),或者以某种方式关联到一个特定的页面,该页面将被请求提取(“CategoryID”)?或者另一种简单的方法,可以轻松地为Request()拾取的DotNetNuke页面指定请求参数。我们需要不同的页面才能有不同的分类

细节 我们在每一页上都有一个模块。它总是调用Request(“CategoryID”),查看是否为页面定义了一个类别,如果是,它会按该类别过滤其结果列表。通常,在URL中指定CategoryID时使用此选项。但在本例中,我们希望以其他方式指定它。我可能会指定一个skin对象作为skin的一部分,它将查看URL并映射到适当的categoryID,然后将其作为会话变量写出,但我正在寻找一种更简单的方法

有什么想法吗?

这允许您在页面的关键字中存储和检索CategoryID。这将在页面加载时调用

        Dim TC As New TabController
        Dim TI As DotNetNuke.Entities.Tabs.TabInfo = TC.GetTab(TabId, PortalId, True)

        Dim tokens() As String = TI.KeyWords.Split(","c)
        For Each token As String In tokens
            Dim tokens2() As String = Trim(token).Split(":"c)
            If tokens2.Length = 2 AndAlso tokens2(0) = "CategoryID" Then
                Response.Write("My CategoryID is " & tokens2(1))
            End If
        Next

我最终创建了一个SkinObject来处理这个问题。目前,我已经硬编码了从TabID到CategoryID的映射,然后我做了一个响应。重定向到页面,将CategoryID附加到URL

我最初尝试在Skin Objects Page.Init中将CategoryID写入ViewState,但模块没有接受

NameSpace DotNetNuke.UI.Skins.Controls
Partial Class MapURLToCategoryID
    Inherits UI.Skins.SkinObjectBase

    Protected Sub Page_Init(sender As Object, e As System.EventArgs) Handles Me.Init
        If Request("CategoryID") <> "" Then
            Exit Sub
        End If
        Dim id As Int16 = -1

        Select Case Request("tabid")
            Case 92
                id = 14
            Case 93
                id = 15
            Case 227
                id = 38
            Case 95
                id = 19
            Case 91
                id = 13
            Case 226
                id = 17
            Case 94
                id = 16
            Case Else
                'do nothing

        End Select
        If id <> -1 Then
            Response.Redirect(NavigateURL("", "CategoryID=" & id.ToString), False)
        End If

    End Sub
End Class
End Namespace
我仍然认为有更好的方法(我担心这会对搜索引擎优化产生影响),但在我想出更好的方法或向模块添加功能之前,这一方法目前还有效

NameSpace DotNetNuke.UI.Skins.Controls
Partial Class MapURLToCategoryID
    Inherits UI.Skins.SkinObjectBase

    Protected Sub Page_Init(sender As Object, e As System.EventArgs) Handles Me.Init
        If Request("CategoryID") <> "" Then
            Exit Sub
        End If
        Dim id As Int16 = -1

        Select Case Request("tabid")
            Case 92
                id = 14
            Case 93
                id = 15
            Case 227
                id = 38
            Case 95
                id = 19
            Case 91
                id = 13
            Case 226
                id = 17
            Case 94
                id = 16
            Case Else
                'do nothing

        End Select
        If id <> -1 Then
            Response.Redirect(NavigateURL("", "CategoryID=" & id.ToString), False)
        End If

    End Sub
End Class
End Namespace
名称空间DotNetNuke.UI.Skins.Controls
部分类MapURLToCategoryID
继承UI.Skins.SkinObjectBase
受保护的子页_Init(发送方作为对象,e作为System.EventArgs)处理Me.Init
如果请求(“类别ID”),则
出口接头
如果结束
Dim id为Int16=-1
选择案例请求(“tabid”)
案例92
id=14
案例93
id=15
案例227
id=38
案例95
id=19
案例91
id=13
案例226
id=17
案例94
id=16
其他情况
“什么也不做
结束选择
如果id-1那么
Response.Redirect(NavigateURL(“,”CategoryID=“&id.ToString”),False)
如果结束
端接头
末级
结束命名空间

我似乎需要澄清我的问题,因为我不希望相同的categoryid在页面之间持续存在。相反,对于某些页面,我希望能够指定categoryID,以便模块将根据该页面的categoryID进行筛选。如果我错了,请更正我的错误,但所有这些选项都需要编写某种代码,并且通过页面设置或模块设置为页面设置categoryID并不容易。隐藏字段仅在设置为runat=“server”时存储在ViewState中。据我所知,CategoryID并非每个模块都是静态的——它会根据用户操作(如过滤gridview或其他)而变化。也许我误解了?如果模块的每个实例的categoryID始终相同,请让我知道,我将在模块实例设置storageNo中向您演示如何执行此操作,categoryID需要在页面级别进行设置,以便模块可以使用请求(“categoryID”)获取。这个模块,Efficion的文章模块,已经提供了一个更好的机制来完成您所描述的工作。但这并不是我们真正想要的。我们真的需要一个更全局的解决方案来将页面映射到categoryID,这样模块就可以使用当前的方法来获取它。我认为最好的解决方案最终将是从我们的类别转换为DNN的新分类法/大众分类法,并让模块根据页面的标记进行过滤。但我们现在只需要一个快速解决方案。谢谢你的努力!