我已经接管了这个网站没有文件(耶!)。也许这会帮助他人理解SiteMap功能。我有一个想法SiteMenu如何建立,但想与我在这里的朋友一起检查,以确保。我的菜单项从哪里来?
我有一个Main.Master,它需要一个SiteMenuHorizontal用户控件。
<%@ 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 enabled="true" defaultProvider="objSiteMap">
<providers>
<clear/>
<add name="objSiteMap" type="LOC.DLL.objSiteMap" securityTrimmingEnabled="true" expirationInterval="1"/>
</providers>
</siteMap>
LOC.DLL.objSiteMap继承SiteMapProvi der并且有重载/覆盖等。这些方法从数据库中获取一个表并构建一个SiteMapNode或SiteMapNodeCollection。
我的困惑是:这个类如何填充我的网页?没有可见的对SiteMap的调用。
我的假设是这样的: 当站点(或页面)建立(或编译?)时,我的用户控件调用它的数据源Global.System.Web.UI.WebControls.SiteMapDataSource。不知何故,该控件引用Web.Config以引用LOC.DLL.objSiteMap,并运行Override/Overload方法来检索SiteMapNode(/ Collection),并将其返回给我的控件?
我有一种感觉,我已经明白了,但希望得到一个确认和/或澄清,并希望在未来帮助其他人动态站点菜单接管项目。
@ jdarnel27 - 现在我知道如何正确使用'Backquote'。感谢您的编辑。 – Win
我很高兴能帮助你学会使用blockquote语法! – jadarnel27
感谢您在SiteMapProvider属性中添加说明,这肯定会帮助任何需要此功能的人。什么会真正顶住这个答案将是说什么时候SiteMapDataSource被执行。在这种情况下,有一个源代码,一个DAL和一个UI(我实际上也有一个Web服务介于两者之间,但对此讨论无所谓)。据我的参考发现,SiteMapDataSource在网站启动时被缓存。 – Suamere