私はドキュメントなしでこのウェブサイトを乗っ取りました (イェイ!)。これは、他のユーザーが SiteMap の機能を理解するのに役立つかもしれません。SiteMenu がどのように構築されているかはわかりますが、ここ SO の仲間に確認したいと思います。
SiteMenuHorizontal ユーザー コントロールを呼び出す Main.Master があります。
<%@ Register Src="uc2Menu.ascx" TagPrefix="uc2" TagName="smHorizontal" %>
...
<uc2:smHorizontal id="uc2Menu" runat="server" />
ユーザー コントロールは非常に単純です。
<%@ Control Language="vb" AutoEventWireup="false" CodeBehind="uc2Menu.ascx.vb" Inherits="uc2Menu" %>
<asp:Menu id="siteMenu" runat="server" DataSourceID="menuSiteMapDataSource" Orientation="Horizontal" />
<asp:SiteMapDataSource ID="menuSiteMapDataSource" runat="server" ShowStartingNode="false" />
コントロールのコードビハインドからの助けはありません:
Public Partial Class uc2Menu
Inherits System.Web.UI.UserControl
Protected Sub siteMenu_MenuItemDataBound(ByVal sender As System.Object, ByVal e As System.Web.UI.WebControls.MenuEventArgs) Handles siteMenu.MenuItemDataBound
e.Item.Target = CType(e.Item.DataItem, SiteMapNode)("Target")
End Sub
End Class
Web.Config DOES は SiteMap を指定します。
<siteMap enabled="true" defaultProvider="objSiteMap">
<providers>
<clear/>
<add name="objSiteMap" type="LOC.DLL.objSiteMap" securityTrimmingEnabled="true" expirationInterval="1"/>
</providers>
</siteMap>
LOC.DLL.objSiteMap は SiteMapProvider を継承し、オーバーロード/オーバーライドなどがあります。メソッドは DB からテーブルを取得し、SiteMapNode または SiteMapNodeCollection を構築します。
私の混乱は次のとおりです。このクラスはどのように私の Web ページにデータを入力していますか? SiteMap への目に見える呼び出しはありません。
私の仮定は次のとおりです。サイト (またはページ) が構築 (またはコンパイル) されると、ユーザー コントロールはそのデータソース、Global.System.Web.UI.WebControls.SiteMapDataSource を呼び出します。どういうわけか、そのコントロールは LOC.DLL.objSiteMap への参照のために Web.Config を参照し、Override/Overload メソッドを実行して SiteMapNode(/Collection) を取得し、それを私のコントロールに戻しますか?
私はそれを理解していると感じていますが、確認および/または明確化を得たいと思っており、将来、動的なサイトメニューでプロジェクトを引き継ぐ他の人を助けたいと思っています.