在ASP.NET MVC 上使用Web.sitemap

来源:互联网 发布:宸轩网络精选 编辑:程序博客网 时间:2024/04/30 11:43
一、用ASP.NET WebForm开发的同学我想都用过Web.sitemap服务器控件吧,这个插件给我们带来了倍儿爽的感觉,大大提高了开发效率,对日后的维护也是大大的好。可是到了ASP.NET MVC,这个插件好像不怎么管用了。于是网上有一个非常好用的 mvc sitemap 插件 mvcsitemapprovider,不过今天小生也写了一个自己的案例,mvc Web.sitemap跨Areas,mvc Web.sitemap跨命名空间,仅供学习,大牛勿喷,小弟也是刚入门!代码如下:
二、步骤
1、新建一个  
Web.sitemap 文件,url  包含了Controller+Action 
<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
  <siteMapNode title="" url="/Home/Index">
    <siteMapNode title="" url="" >   
      <siteMapNode title="" url="/infoquery/myinfo/Index" />
      <siteMapNode title="" url="/InfoQuery/Contract/Index" />
    </siteMapNode>
    <siteMapNode title="" url="">
      <siteMapNode title="" url="/Manager/Users/Index"/>
      <siteMapNode title="" url="/Manager/Excels/Index"/>
      <siteMapNode title="1" url="/Manager/AnswerFB/Index">
      <siteMapNode title="2" url="/Manager/AnswerFB/Index">
        <siteMapNode title="" url="/Manager/AnswerFB/AnswerFBBack"/>
      </siteMapNode>
      </siteMapNode>
    </siteMapNode>
  </siteMapNode>
</siteMap>
 

2、新建一个类
GetMvcSiteMap.cs ,如果用缓存,可以自己加上
 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
public class MVCSiteMap
{
    /// <summary>
    ///siteMap 
    /// </summary>
    /// <param name="CurrentPageUrl">url Request.Url,</param>
    /// <returns>htmlhtml</returns>
    public static string GetMvcSiteMap(string CurrentPageUrl)
    {
        DataSet ds = new DataSet();
        ds.ReadXml(HttpContext.Current.Server.MapPath("~/Web.sitemap"));//xml
        DataRow[] drs = ds.Tables[0].Select("url='" + CurrentPageUrl + "'");//url
        int rowIndex = drs.Count();//url,所以
        string url = "";
        if (rowIndex > 0)
        {
            rowIndex = rowIndex - 1;
            url = urlLink(ds.Tables[0], drs[rowIndex]["siteMapNode_Id_0"].ToString()) + string.Format("<a>{0}</a>", drs[rowIndex]["title"]);
        }
        return url;
    }
    /// <summary>
    /// 
    /// </summary>
    private static string urlLink(DataTable dt, string parentid)
    {
        string Html = "";
        if (!string.IsNullOrEmpty(parentid))
        {
            DataRow[] drs = dt.Select("siteMapNode_Id=" + parentid);
            if (drs.Count() > 0)
            {
                string url = drs[0]["url"].ToString();
                if (!string.IsNullOrEmpty(url))
                {
                    url = string.Format("href='{0}'", url);
                }
                Html = string.Format("<a {0}>{1}</a>>", url, drs[0]["title"]);
                Html = urlLink(dt, drs[0]["siteMapNode_Id_0"].ToString()) + Html;
            }
        }
        return Html;
    }
}
 
3、html 页面调用,<li class="one">@Html.Raw(MVCSiteMap.GetMvcSiteMap("/Manager/AnswerFB/Index") )</li>
图片 
 4、最终效果
图片 
6 0
原创粉丝点击