zoukankan      html  css  js  c++  java
  • 根据URL参数显示网站地图

    一 写法一: 

    1. 网站地图文件Web.sitemap

    <?xml version="1.0" encoding="utf-8" ?>
    <siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
        <siteMapNode url="~/Default.aspx" title="首页"  description="首页" resourceKey="root">
          <siteMapNode url="~/Category.aspx" title="分类页" description="分类页" resourceKey="category">
            <siteMapNode url="~/Item.aspx" title="单品页" description="单品页" resourceKey="item" />
          </siteMapNode>
        </siteMapNode>
    </siteMap>

    2. 页面上增加站点地图控件

    <asp:SiteMapPath ID="SiteMapPath1" runat="server">
     </asp:SiteMapPath>

        页面就会显示出相应的页面站点地图名:

        首页、分类页、单品页 等

    3. 覆写方法,使得面包屑显示的名称更为人性化

        比如女装分类页面,地图上不只是显示:首页->分类页,而是显示为:首页->女装分类。

        这样就要在 分类页Category.aspx ,Page_Load里增加事件:

        if (!IsPostBack && !string.IsNullOrEmpty(Request.QueryString["name"]))
       {
           SiteMap.SiteMapResolve += new SiteMapResolveEventHandler(thisPage_SiteMap_SiteMapResolve);
        }

        SiteMap.SiteMapResolve += new SiteMapResolveEventHandler(thisPage_SiteMap_SiteMapResolve);

        事件说明:

        SiteMapResolve事件处理动态地改变目前的SiteMapNode。

        本页面覆写事件方法thisPage_SiteMap_SiteMapResolve:

            SiteMapNode thisPage_SiteMap_SiteMapResolve(object sender, SiteMapResolveEventArgs e)
            {
                // 只需要在一个执行一个请求

                SiteMap.SiteMapResolve -= new SiteMapResolveEventHandler(thisPage_SiteMap_SiteMapResolve);

                if (SiteMap.CurrentNode != null)
                {
                    // SiteMap.CurrentNode是只读的,所以我们需要一个克隆操作

                    SiteMapNode currentNode = SiteMap.CurrentNode.Clone(true);

                    currentNode.Title = Request.QueryString["name"];

                    // Use the changed one in the breadcrumb.
                    return currentNode;
                }
                return null;
            }

         这样URL :/Category.aspx?name=女装分类 ,显示为 : 首页 > 女装分类

     4. 覆写 单品页 站点地图面包屑。

         在覆写前,显示如下 首页 > 分类页 > 单品页

         要显示如下: 首页 > 女装分类 > 时尚外套

         同上面增加页面 

         if (!IsPostBack && !string.IsNullOrEmpty(Request.QueryString["name"]))
       {
           SiteMap.SiteMapResolve += new SiteMapResolveEventHandler(thisPage_SiteMap_SiteMapResolve);
        }

        覆写方法:

       

    SiteMapNode thisPage_SiteMap_SiteMapResolve(object sender, SiteMapResolveEventArgs e)
            {
                // 只能请求一次
                SiteMap.SiteMapResolve -= new SiteMapResolveEventHandler(thisPage_SiteMap_SiteMapResolve);

                if (SiteMap.CurrentNode != null)
                {
                    // SiteMap.CurrentNode是只读的,所以我们需要一个克隆操作。
                    SiteMapNode currentNode = SiteMap.CurrentNode.Clone(true);

                    currentNode.Title = Request.QueryString["name"];
      
      //从数据库取出当前单品的分类名
                    currentNode.ParentNode.Title = Database.GetCategoryByItem(Request.QueryString["name"]);
                    currentNode.ParentNode.Url = "/Category.aspx?name=" + Database.GetCategoryByItem(Request.QueryString["name"]);

                    // 返回改变后的面包屑
                    return currentNode;
                }
                return null;
            }


    二、另外种写法:同样也是针对相同页面有不同参数传递

     protected void Page_Load(object sender, EventArgs e)
            {         
                if (!Page.IsPostBack)
                {

                    //文章类型ID

                    SiteMapID = Request.QueryString.Get("SiteMapID");
                    requestURL = Request.Url.ToString().Replace("/", "");
                    SiteMap.SiteMapResolve += new SiteMapResolveEventHandler(SiteMap_SiteMapResolve);
                }
            }
    SiteMapNode SiteMap_SiteMapResolve(object sender, SiteMapResolveEventArgs e)
            {
                // 只需要在一个执行一个请求。
                //SiteMap.SiteMapResolve -= new SiteMapResolveEventHandler(SiteMap_SiteMapResolve);
                SiteMapNode currentNode = null;
                //如果当前被请求页的SiteMapNode不为空,就把当前页的SiteMapNode赋值个新副本
                if (SiteMap.CurrentNode != null)
                {
                    currentNode = SiteMap.CurrentNode.Clone(true);
                }
                else
                {
                    //如果为空,根据URL找到对应节点赋值给currentNode
                   
                    if (SiteMapID != "" && requestURL.Contains(SiteMapID))
                    {
                        SiteMapNode smn = SiteMap.Provider.FindSiteMapNode("~/CommonPage/ShowList.aspx?SiteMapID=" + SiteMapID);
                        currentNode = smn;
                    }
                  
                }
                return currentNode;
            }

    部分Web.sitemap

     
    <?xml version="1.0" encoding="utf-8" ?>
    <siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
      <siteMapNode url="CommonPage/index.aspx" title="首页"  description="首页">
        <siteMapNode url="" title="组织机构"  description="" >
          <siteMapNode  url="CommonPage/ShowContent.aspx?ContentID=42504711-4BE0-4C04-BC22-9D071FC7D3B2"
                        title="AOC"  description="AOC" />
        </siteMapNode>
        <siteMapNode url="" title="追溯指南"  description="" >
          <siteMapNode  url="CommonPage/ShowList.aspx?CategoryID=3A33D061-97D7-40B0-8618-231570317DCF"
                        title="解决方案"  description="解决方案" >
            <siteMapNode   url="CommonPage/ShowList.aspx?SiteMapID=3A33D061-97D7-40B0-8618-231570317DCF" 
                          title="正文"  description="正文" />
          </siteMapNode>
          <siteMapNode  url="CommonPage/ShowList.aspx?CategoryID=6669190F-F5DB-4A1A-BB54-A2EC66C58FD4"
                        title="应用案例"  description="应用案例" >
            <siteMapNode   url="CommonPage/ShowList.aspx?SiteMapID=6669190F-F5DB-4A1A-BB54-A2EC66C58FD4"
                          title="正文"  description="正文" />
          </siteMapNode>
        </siteMapNode>
  • 相关阅读:
    Visual Source Safe的使用方法
    二十道经典C#面试题
    C#中转义符
    在自己迷惑的时候,提醒自己
    C#中多态
    C#重载和重写
    DataTable定义
    C#怎么调用方法
    mysql数据类型——字符串char(m)和varchar(m)
    mysql数据类型——时间类型
  • 原文地址:https://www.cnblogs.com/mxh691/p/2059933.html
Copyright © 2011-2022 走看看