AspNet站点地图小结

AspNet站点地图小结

一、配置项目的站点地图路径

a)         通过修改站点地图的提供程序实现

Web.config

<system.web> 节点下

    <siteMap defaultProvider="CRMSiteMapProvider"> //代表默认提供程序

         <providers >

        <add name="CRMSiteMapProvider" type="System.Web.XmlSiteMapProvider"  siteMapFile="~/Web.sitemap"/>

        <add name="SystemSiteMapProvider"  type="System.Web.XmlSiteMapProvider"  siteMapFile="~/Manager/Web.sitemap"/>

解析:

           Name: 提供程序名

           Type: 提供程序类型 System.Web.XmlSiteMapProvider

           siteMapFile站点地图路径

      </providers>

 </siteMap>

b)         绑定不同的站点地图只需将数据源的SiteMapProvider 属性设置为对应配置的提供程序名称即可

二、站点地图的权限设置

1.       配置站点地图的权限

<siteMapNode url="" roles="总经理" title="UserAddddddddd" description=""></siteMapNode>

若有多个角色可以用号隔开。

2.       配置站点地图的提供程序

           <siteMap defaultProvider="CRMWebSiteMap" enabled="true">

                 <providers>

                      <add name="CRMWebSiteMap"

                 type="System.Web.XmlSiteMapProvider"

                 siteMapFile="~/Web.sitemap"

                 securityTrimmingEnabled="true"/>

                 </providers>

           </siteMap>

 注意: 要将securityTrimmingEnabled="true"设置为true

对于空URL节点起作用,其余节点不起作用

三、动态生成站点地图

a)         通过后台生成站点地图

1.       编写后台类(BLL DAL 等)

2.       在页面中加载导航内容

   protected void Page_Load(object sender, EventArgs e)

    {

        bindTree(0,null);

    }

    private void bindTree(int parentid,TreeNode node)

    {

        BLL.BLLSiteMap b = new BLL.BLLSiteMap();

        List<Models.SiteMap> siteMapList=b.getSiteMap(parentid);

        foreach (Models.SiteMap siteMap in siteMapList)

        {

            TreeNode t = new TreeNode();

            t.NavigateUrl = siteMap.Url;

            t.Text = siteMap.Title;

            t.Value = siteMap.Title;

            bindTree(siteMap.Id,t);

            if (node != null)

            {

                node.ChildNodes.Add(t);

            }

            else {

                this.TreeView1.Nodes.Add(t);

            }

        }

    }

b)         通过重写站点地图提供程序实现

1.    web.config 文件中加入sitemap提供程序

<add name="SqlSiteMapProvider" type="SqlSiteMapProvider" connectionStringName="ConStr"/>

Type 对应后台实现其功能的类

2.   AppCode文件夹下写对应的实现类

using System;

using System.Data;

using System.Configuration;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

using System.Configuration.Provider;

using System.Configuration;

using System.Collections.Generic;

using System.Web.Configuration;

using BLL;

using System.Collections.Specialized;

/// <summary>

/// CRMProvider 的摘要说明

/// </summary>

public class CRMProvider:StaticSiteMapProvider

{

    public SiteMapNode root;

    public string key;

    private readonly object obj = new object();

    public CRMProvider()

    {

}

//重写其Initialize 方法注意重写的方法参数

//可以通过转到定义查看此方法

    public override void Initialize(string name, NameValueCollection attributes)

    {

        base.Initialize(name, attributes);

        if (attributes == null)

        {

            throw new ArgumentNullException();

        }

 

        if (string.IsNullOrEmpty(name))

        {

            name = "SqlSiteMapProvider";

        }

 

        key = name;

 

        if (!attributes.HasKeys() || attributes["connectionStringName"] == null)

        {

            throw new ProviderException();

        }

 

        //获得连接字符串的名称

        string connectionStringName = attributes["connectionStringName"].ToString();

        if (string.IsNullOrEmpty(connectionStringName))

        {

            throw new ProviderException();

        }

 

        if (string.IsNullOrEmpty(WebConfigurationManager.ConnectionStrings[connectionStringName].ConnectionString))

        {

            throw new ProviderException();

        }

}

//继承StaticSiteMapProvider类需实现其方法

    public override SiteMapNode BuildSiteMap()

    {

        SiteMapNode rootnode = new SiteMapNode(this,"root");

        lock(obj){

            if(root !=null){

                return root;

            }

            rootnode.Title = "CRMaa";

            rootnode.Url = "sss";

            rootnode.Description = "CRM系统";

            AddNode(rootnode,null);

            root = rootnode;

            GetSiteMapNode(0, RootNode);

        }

        return rootnode;

    }

 

    protected override SiteMapNode GetRootNodeCore()

    {

        lock(obj){

            root = BuildSiteMap();

//注意SiteMapNode创建时需保证线程安全

//将其锁定

        }

        return root;

    }

 

 

    private void GetSiteMapNode(int parentid, SiteMapNode parentNode)

    {

        BLL.BLLSiteMap b = new BLLSiteMap();

        List<Models.SiteMap> list = b.getSiteMap(parentid);

        foreach (Models.SiteMap siteMap in list)

        {

            SiteMapNode node = new SiteMapNode(this, siteMap.Id.ToString());

            node.Url = siteMap.Url;

            node.Title = siteMap.Title;

            node.Description = siteMap.Description;

            AddNode(node, parentNode);

            GetSiteMapNode(siteMap.Id, node);

          

        }

    }

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值