Я внимательно изучил загрузку документации MS только для того, чтобы найти древовидное представление, похожее на структуру, для использования файлов Sitemap. Я не думаю, что кто-нибудь знает о том, как можно иметь структуру в виде папок для навигации по карте сайта? Возьмем, к примеру, следующую структуру
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-страницы, которые находятся в разных папках по всему нашему веб-приложению. Это то, что нужно изменить, как вы можете себе представить.
Есть идеи?
EDIT
Мне пришлось придумать решение 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>
Вот пример карты сайта.