Web.sitemap文件中siteMapNode节点有roles属性,但是直接设置并不起作用,查证资料后发现需在web.config文件中设置Site Map Providers才可以。

 

asp.net 2.0中根据roles显示不同的sitemap<system.web>
asp.net 2.0中根据roles显示不同的sitemap...
asp.net 2.0中根据roles显示不同的sitemap
asp.net 2.0中根据roles显示不同的sitemap  
<siteMap defaultProvider="XmlSiteMapProvider" enabled="true">
asp.net 2.0中根据roles显示不同的sitemap      
<providers>
asp.net 2.0中根据roles显示不同的sitemap        
<add name="XmlSiteMapProvider"
asp.net 2.0中根据roles显示不同的sitemap    description
="SiteMap provider which reads in .sitemap XML files."
asp.net 2.0中根据roles显示不同的sitemap    type
="System.Web.XmlSiteMapProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
asp.net 2.0中根据roles显示不同的sitemap    siteMapFile
="Web.sitemap"
asp.net 2.0中根据roles显示不同的sitemap    securityTrimmingEnabled
="true"/>
asp.net 2.0中根据roles显示不同的sitemap      
</providers>
asp.net 2.0中根据roles显示不同的sitemap    
</siteMap>
asp.net 2.0中根据roles显示不同的sitemap
</system.web>
asp.net 2.0中根据roles显示不同的sitemap
asp.net 2.0中根据roles显示不同的sitemap

注意siteMap这一节, 关键是这里的设置,然后在Web.sitemap文件中相应的siteMapNode节点上加上roles属性即可。但实际应用中发现只可以加在一级节点上,二级节点上无效,例子如下。

 

asp.net 2.0中根据roles显示不同的sitemap<?xml version="1.0" encoding="utf-8" ?>
asp.net 2.0中根据roles显示不同的sitemap
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
asp.net 2.0中根据roles显示不同的sitemap    
<siteMapNode url="" title="系统管理"  description="" roles="系统管理帐户,用户管理员">
asp.net 2.0中根据roles显示不同的sitemap        
<siteMapNode url="~/System/UserManage.aspx" title="用户管理"  description=""/>
asp.net 2.0中根据roles显示不同的sitemap        
<siteMapNode url="~/System/CreateUser.aspx" title="创建用户"  description=""/>
asp.net 2.0中根据roles显示不同的sitemap        
<siteMapNode url="~/System/CityManage.aspx" title="地市维护"  description=""/>  
asp.net 2.0中根据roles显示不同的sitemap    
</siteMapNode>
asp.net 2.0中根据roles显示不同的sitemap
</siteMap>

 

另外查询MSDN,发现可以使用Site Map Providers可以连接到数据库中读取sitemap

首先要使用SiteMapApi来作一个自定义的Provider

 

里面用到了一个存储过程

asp.net 2.0中根据roles显示不同的sitemapCREATE PROCEDURE proc_GetSiteMap AS SELECT [ID][Title],[Description][Url][Roles][Parent] FROM [SiteMap] ORDER BY [ID]

然后在web.config里做如下设置


asp.net 2.0中根据roles显示不同的sitemap<configuration>
asp.net 2.0中根据roles显示不同的sitemap  
<connectionStrings>
asp.net 2.0中根据roles显示不同的sitemap    
<add name="SiteMapConnectionString" connectionString="..." />
asp.net 2.0中根据roles显示不同的sitemap  
</connectionStrings>
asp.net 2.0中根据roles显示不同的sitemap  
<system.web>
asp.net 2.0中根据roles显示不同的sitemap    
<siteMap enabled="true" defaultProvider="AspNetSqlSiteMapProvider">
asp.net 2.0中根据roles显示不同的sitemap      
<providers>
asp.net 2.0中根据roles显示不同的sitemap        
<add name="AspNetSqlSiteMapProvider"
asp.net 2.0中根据roles显示不同的sitemap          type
="SqlSiteMapProvider, CustomProviders"
asp.net 2.0中根据roles显示不同的sitemap          description
="SQL Server site map provider"
asp.net 2.0中根据roles显示不同的sitemap          securityTrimmingEnabled
="true"
asp.net 2.0中根据roles显示不同的sitemap          connectionStringName
="SiteMapConnectionString"
asp.net 2.0中根据roles显示不同的sitemap        
/>
asp.net 2.0中根据roles显示不同的sitemap      
</providers>
asp.net 2.0中根据roles显示不同的sitemap    
</siteMap>
asp.net 2.0中根据roles显示不同的sitemap  
</system.web>
asp.net 2.0中根据roles显示不同的sitemap
</configuration>
 

数据库sitemap表结构

 

asp.net 2.0中根据roles显示不同的sitemapCREATE TABLE [dbo].[SiteMap] (
asp.net 2.0中根据roles显示不同的sitemap    
[ID]          [int] NOT NULL,
asp.net 2.0中根据roles显示不同的sitemap    
[Title]       [varchar] (32),
asp.net 2.0中根据roles显示不同的sitemap    
[Description] [varchar] (512),
asp.net 2.0中根据roles显示不同的sitemap    
[Url]         [varchar] (512),
asp.net 2.0中根据roles显示不同的sitemap    
[Roles]       [varchar] (512),
asp.net 2.0中根据roles显示不同的sitemap    
[Parent]      [int]
asp.net 2.0中根据roles显示不同的sitemap
ON [PRIMARY]
asp.net 2.0中根据roles显示不同的sitemap
GO
asp.net 2.0中根据roles显示不同的sitemap
asp.net 2.0中根据roles显示不同的sitemap
ALTER TABLE [dbo].[SiteMap] ADD 
asp.net 2.0中根据roles显示不同的sitemap    
CONSTRAINT [PK_SiteMap] PRIMARY KEY CLUSTERED 
asp.net 2.0中根据roles显示不同的sitemap    (
asp.net 2.0中根据roles显示不同的sitemap        
[ID]
asp.net 2.0中根据roles显示不同的sitemap    )  
ON [PRIMARY] 
asp.net 2.0中根据roles显示不同的sitemap
GO
asp.net 2.0中根据roles显示不同的sitemap
asp.net 2.0中根据roles显示不同的sitemap

数据的实例

asp.net 2.0中根据roles显示不同的sitemap
MSDN上Site Map Providers说明地址:http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnaspp/html/ASPNETProvMod_Prt3.asp







相关文章: