MvcSiteMapProvider配置使用

使用过传统asp.net form的开发人员都知道,asp.net中提供了一个sitemap功能,能够方便的生成导航菜单或者导航链接,仅需要通过配置即可实现对导航链接的管理。对于site map的配置以及使用,基本上主流的asp.net教材都有典型的例子,比如如何使用site map datasource时,如何配置xml格式sitemap等等。而作为asp.net的新模式应用 asp.net mvc似乎没有内置的实现sitemap的功能,当然理论上还是可以写硬编码一些相对路径到节点中,但是毕竟不能很好的跟mvc中controller和action结合在一起,毕竟sitemap出来的时候还没有mvc呢。不过作为.net的框架,历来都是提供了良好的扩展性,经典的策略模式也同样被应用在sitemap的应用中,仅仅需要实现自己的provider即可。

最近刚好公司项目要使用,就简单研究了一下,终于有了些眉目,效果还算满意。具体的实现方式如下:
 
1、 http://mvcsitemap.codeplex.com/ 下载  mvcSiteMapProvider  动态库文件,并根据当前项目的.NET版本,引用对应的动态库文件
 
2、 在web.config中配置sitemap节点,主要是提供一个provider,设置一下属性即可
在<system.web>下,添加如下代码:
<siteMap defaultProvider="MvcSiteMapProvider" enabled="true">
<providers>
<clear/>
<add name="MvcSiteMapProvider"
type="MvcSiteMapProvider.DefaultSiteMapProvider, MvcSiteMapProvider"
siteMapFile="~/WebIC.Sitemap"(这里的文件名,要和新建的站点地图的文件名一致)
securityTrimmingEnabled="true"
cacheDuration="5"
enableLocalization="true"
scanAssembliesForSiteMapNodes="true"
excludeAssembliesForScan=""
includeAssembliesForScan=""
attributesToIgnore="bling,visibility"
nodeKeyGenerator="MvcSiteMapProvider.DefaultNodeKeyGenerator, MvcSiteMapProvider"
controllerTypeResolver="MvcSiteMapProvider.DefaultControllerTypeResolver, MvcSiteMapProvider"
actionMethodParameterResolver="MvcSiteMapProvider.DefaultActionMethodParameterResolver, MvcSiteMapProvider"
aclModule="MvcSiteMapProvider.DefaultAclModule, MvcSiteMapProvider"
siteMapNodeUrlResolver="MvcSiteMapProvider.DefaultSiteMapNodeUrlResolver, MvcSiteMapProvider"
siteMapNodeVisibilityProvider="MvcSiteMapProvider.DefaultSiteMapNodeVisibilityProvider, MvcSiteMapProvider"
siteMapProviderEventHandler="MvcSiteMapProvider.DefaultSiteMapProviderEventHandler, MvcSiteMapProvider"/>
</providers>
</siteMap>
其中,siteMapFile="~/Web.Sitemap"中的Web.SiteMap就是等会要新建的站点地图的名字。
 
3、创建sitemap文件并配置节点,文件名要跟web.config中配置的一样,这里是Web.sitemap。
在项目的根目录新建文件,名称是:Web.SiteMap,根据如下代码,配置站点地图的根节点
<?xml version="1.0" encoding="utf-8" ?>
<mvcSiteMap xmlns=http://mvcsitemap.codeplex.com/schemas/MvcSiteMap-File-3.0 enableLocalization="true">
<mvcSiteMapNode title="首页" controller="Home" action="Index" changeFrequency="Always" updatePriority="Normal">
<mvcSiteMapNode title="关于" controller="Home" action="About"/>
<mvcSiteMapNode title="登陆" controller="Account" action="LogOn"/>
<mvcSiteMapNode title="注册" controller="Account" action="Register"/>
<mvcSiteMapNode title="修改密码" controller="Account" action="ChangePassword"/>
</mvcSiteMap>
只要在其中修改对应的title,controller和action,就可以把自己想显示的静态的网站导航列了出来
 
4、在_LayOut.cshtml文件中,添加引用命名空间:@using MvcSiteMapProvider.Web.Html;
在<div id=”body”>下,添加
@Html.MvcSiteMap().SiteMapPath()用来显示项目的导航菜单
这样,一个静态的站点导航就配置完成了。
 
5、配置动态的导航显示
动态显示导航,主要是重写GetDynamicNodeCollection函数,从数据库中读取数据,生成对应的节点首先,在项目的根目录,新建一个类文件,如: 文件中获取动态节点的代码如下:
public class AdminOrgDynamicNodeProvider : DynamicNodeProviderBase
    {
        DataICDataContext context = new DataICDataContext();
 
        public override IEnumerable<DynamicNode> GetDynamicNodeCollection()
        {
            //遍历数据表,为sitemap生成动态节点
            foreach (var org in context.Org)
            {
                DynamicNode node = new DynamicNode();
                node.Title = org.Name;
                node.RouteValues.Add("id", org.ID);
                yield return node;
            }
        }
    }
6、然后,在Web.SiteMap中添加动态节点的获取:
<mvcSiteMapNode title="社区管理" controller="AdminOrg" action="OrgIndex">
<mvcSiteMapNode title="orgDetails" controller="AdminOrg" action="OrgDetails" dynamicNodeProvider="WebIC.DynamicNodeProvider.AdminOrgSubDynamicNodeProvider,WebIC"/>  (这里,就是添加动态节点的获取类文件的路径,要注意写清楚对应的文件路径)
<mvcSiteMapNode title="编辑社区信息" controller="AdminOrg" action="OrgEdit" />
</mvcSiteMapNode>
这样,在项目的导航中,点击对应的链接,导航中就会出现对应的位置了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lin&Yi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值