我想知道是否有一种简单的方法可以在页面标题部分中指定请求参数(即CategoryID),或者以某种方式与请求(“CategoryID”)选取的特定页面相关联?或者另一种简单的方法,可以轻松地为DotNetNuke页面指定一个请求参数,该页面将由Request()获取。我们需要不同的页面来拥有不同的categoryid。
详细 我们每个页面都有一个模块。它始终调用Request(“CategoryID”)来查看是否为页面定义了类别,如果是,则按类别过滤它的结果列表。通常,在URL中指定CategoryID时使用此选项。但在这种情况下,我们想以其他方式指定它。我可以指定一个皮肤对象作为皮肤的一部分,它将查看URL并映射到相应的categoryID并将其写为会话变量,但我正在寻找一种更简单的方法。
有什么想法吗?
答案 0 :(得分:0)
这允许您在Page的关键字中存储和检索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
答案 1 :(得分:0)
我最终创建了一个处理此问题的SkinObject。目前,我已经对从TabID到CategoryID的映射进行了硬编码,然后我做了一个Response.Redirect到了带有附加到URL的CategoryID的页面。
我最初尝试将CategoryID写入Skin Objects Page.Init中的ViewState,但该模块没有获取。
我仍然认为有一种更好的方式(我担心这会对SEO产生影响)但是现在这种方法有效,直到我想出更好的方法或为模块添加功能。
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