我仔细阅读了大量的 MS 文档,只是为了找到一个树状视图,就像使用站点地图的结构一样。我想没有人知道如何为站点地图导航提供类似文件夹的结构?以如下结构为例
Home
About
Me.aspx
MyFamily.aspx
MyPets.aspx
Contact
Telephone.aspx
Email.aspx
Disclaimer.aspx
“关于”和“联系方式”将是文件夹,但站点地图永远不会在单个页面上分层。所以,我的根页面会有两个菜单项,一个是“主页”,它就像一个文件夹,可以深入了解关于和联系人菜单,另一个是免责声明页面的链接。我希望能够单击主页,它将重新加载带有“关于”和“联系”链接的菜单,并完全隐藏“主页”和“免责声明”。
Home >
Disclaimer
然后点击主页,你会得到
About >
Contact >
然后当点击关于你会得到
Me
My Family
My Pets
每个菜单都会有一个“向上”菜单来返回一个文件夹。
我看不出有一个简单的解决方案,但目前我们使用静态 html 页面,这些页面位于我们 Web 应用程序的不同文件夹中。正如您可以想象的那样,这是需要改变的。
有任何想法吗?
编辑
我不得不想出一个 VB.NET 解决方案
<script runat="server">
Private Function GetSecondaryNavItems() As String
Dim sRet As String = ""
Dim oCurrNode As System.Web.SiteMapNode = Nothing
Dim oCurrParentNode As System.Web.SiteMapNode = Nothing
'Dim sCurrPage As String = GetURL(Request.ServerVariables("SCRIPT_NAME").ToLower())
Dim sCurrPage As String = GetURL(HttpContext.Current.Request.ServerVariables("SCRIPT_NAME").ToLower())
oCurrNode = GetCurrentNode(sCurrPage, SiteMap.RootNode)
If Not oCurrNode Is Nothing Then
oCurrParentNode = oCurrNode.ParentNode
End If
If Not oCurrParentNode Is Nothing Then
If Not oCurrParentNode Is SiteMap.RootNode Then
sRet += "Parent Folder Link"
If Not oCurrNode Is Nothing Then
For Each oChild As SiteMapNode In oCurrParentNode.ChildNodes
sRet += "Link for child"
Next
End If
End If
End If
Return sRet
End Function
Private Function GetURL(ByVal fullURL As String) As String
Return fullURL.Substring(fullURL.LastIndexOf("/"))
End Function
Private Function GetCurrentNode(ByVal _sCurrentPageURL As String, ByVal _oNode As SiteMapNode) As SiteMapNode
Dim oNodeRet As SiteMapNode = Nothing
For Each oNodeCheck As SiteMapNode In _oNode.ChildNodes
If oNodeCheck.HasChildNodes = True Then
oNodeRet = GetCurrentNode(_sCurrentPageURL, oNodeCheck)
End If
If oNodeRet Is Nothing Then
Exit For
End If
Dim sURL As String = oNodeCheck.Url.ToLower()
Dim iPos As Integer = sURL.IndexOf("?")
If iPos > 0 Then
sURL = sURL.Substring(0, iPos)
End If
iPos = sURL.LastIndexOf("/")
If iPos > 0 Then
sURL = sURL.Substring(iPos)
End If
If sURL = _sCurrentPageURL Then
oNodeRet = oNodeCheck
Exit For
End If
Next
Return oNodeRet
End Function
</script>
这是直接在母版页文件中的(临时的,我稍后会放在模型后面的代码中)。
然后我在身体里得到了这个
<div id="sidebar">
<%= GetSecondaryNavItems() %>
</div>
再次,暂时只是为了测试。它实际上并没有输出任何东西,但是我认为我的 GetURL 定义不正确。我假设它只是获取实际文件?不过我可能错了:)
编辑编辑:出于某种原因,我没有得到任何输出,所以我认为这是我的站点地图。我需要调试它,但我现在正在远程处理,所以它很慢;)
<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
<siteMapNode url="Accounts/Default.aspx" title="Accounts" description="Accounts">
<siteMapNode url="Accounts/Test.aspx" title="Client Balances" description="Client Balances">
<siteMapNode url="Hello.aspx" title="Hello" description="rarar" />
<siteMapNode url="Hiya.aspx" title="Hiya" description="rarar" />
</siteMapNode>
<siteMapNode url="Test.aspx" title="Test" description="rarar" />
</siteMapNode>
</siteMap>
这是示例站点地图。