ASP.NET提供的站点地图为我们建立导航栏和菜单提供了极大的方便。此外我们还可以建立自己的站点地图提供程序,从而使我们的菜单项可控。
先来了解下menu等导航控件与站点地图的关系。我们在ASP .NET项目中所建立的web.siteMap 其实就是一个遵循一定规范的xml文件,我们叫它站点地图文件。Dot net 为我们定义了站点地图提供程序。这个站点地图提供程序所完成的任务就是要读出我们所需要作为导航的数据。例如ASP.NET 默认的站点地图提供程序是xmlSiteMapProvider(其实就是一个类),通常情况下,menu等web导航控件是通过此类读取web.siteMap文件中的数据的。
Dot net 中有默认的站点地图提供程序,同时它也允许我们自己创建自己的站点地图提供程序(类),也就是提供一个从其他数据源中读数据的类。多数情况下,我们的数据会存在数据库中,而不仅仅是固定在web.siteMap文件中。这时我们站点地图提供程序,便可以继承StaticSiteMapProvider类来完成了。实现此类有三个方法是必须重写的,它们是:Initialize,GetRootNodeCore和BuildSiteMap。
完成自己的站点地图提供程序后,我们还需要告诉ASP DOT NET 默认提供程序是我们新建的类。这需要在web.config配置文件中设置。代码如下:
<siteMap>
<providers>
<add name="mySiteMapProvider" type="SiteProviderExe" conn="Data Source=MICROSO-1PGF29S/SQLEXPRESS;Initial Catalog=Demo;User ID=sa;Password=123;"/>
</providers>
</siteMap>
要注意 这部分代码是在配置文件中的< system.web>标签中设置的。其中的类型(type)就是我们站点地图提供程序的类的类型,name则是随便起的,后面的字符串是连接数据库的字符串。
完成这后我们还需要在web.siteMap文件中添加节点:<siteMapNode provider="mySiteMapProvider" />,注意这就是刚才的name 。
再在数据库中存储好我们的文件就可以了。不过现在我们还没给自己供程序的站点地图提的实现代码呢,如下:
上面这个站点地图提供程序要从数据库中读数据,它用到了两张表,如下:
大体就是这样。实现的重点是要清楚站点地图提供程序的作用是从数据源中读出需要在menu等web导航控件中显示和连接的数据。本例中使用sql server作为数据源。但XMLSiteMapProvider 的数据源则是以siteMap为文件类型的文件。想整清楚,我们还需要看一下Systemweb 命名空间下StaticSiteMapProvider ,XmlsiteMapProvider,SiteMapNode 等类以及System.data命名空间下DataView等类的使用