zoukankan      html  css  js  c++  java
  • 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>
    这样,在项目的导航中,点击对应的链接,导航中就会出现对应的位置了。
    年轻不是你玩的理由,而是你奋斗的资本
  • 相关阅读:
    广大数据结构复习之顺序表
    vs2017编译器编写c语言代码函数安全问题
    大数据学习之Spark Streaming进阶 52
    大数据学习之Spark Streaming基础 52
    大数据学习之SparkSQL数据源 51
    本地eclipse idea 写的Hadoop的API和 spark程序不能访问云服务器中的数据
    大数据学习之SparkSQL 50
    【PHP】上传图片翻转问题
    【Linux】CentOS7 安装gdb
    【Linux】yum [Errno 14] HTTP Error 404
  • 原文地址:https://www.cnblogs.com/lyaxx1314/p/3232372.html
Copyright © 2011-2022 走看看