サイトマップを使用するためのツリー ビューのような構造を見つけるためだけに、大量の MS ドキュメントをよく調べました。サイトマップのナビゲーションにフォルダーのような構造を持たせる方法を誰も知らないと思いますか? たとえば、次のような構造を取ります
Home
About
Me.aspx
MyFamily.aspx
MyPets.aspx
Contact
Telephone.aspx
Email.aspx
Disclaimer.aspx
「概要」と「連絡先」はフォルダーになりますが、サイトマップは単一のページで階層化されることはありません。したがって、ルート ページには 2 つのメニュー項目があり、1 つは "Home" で、[About] メニューと [Contact] メニューにドリルダウンするためのフォルダーのように機能し、もう 1 つは免責事項のページへのリンクです。ホームをクリックすると、「概要」と「連絡先」のリンクを含むメニューがリロードされ、「ホーム」と「免責事項」が完全に非表示になります。
Home >
Disclaimer
次に、ホームをクリックすると、
About >
Contact >
次に、あなたについてをクリックすると、
Me
My Family
My Pets
すべてのメニューには、フォルダーに戻るための「上」メニューがあります。
簡単な解決策があるとは思えませんが、現時点では、Web アプリケーション全体のさまざまなフォルダーにある静的な html ページを使用しています。これは、ご想像のとおり、変更が必要なものです。
何か案は?
編集
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 の定義が間違っていると思います。実際のファイルを取得しているだけだと思っていましたか?私は非常に間違っている可能性があります:)
EDIT EDIT : 何らかの理由で出力が得られないため、サイトマップだと思いました。私はそれをデバッグする必要がありますが、私は今のところリモートで作業しているので、かなり遅いです;)
<?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>
サイトマップの例を次に示します。