一、用ASP.NET WebForm开发的同学我想都用过Web.sitemap服务器控件吧,这个插件给我们带来了倍儿爽的感觉,大大提高了开发效率,对日后的维护也是大大的好。可是到了ASP.NET MVC,这个插件好像不怎么管用了。于是网上有一个非常好用的 mvc sitemap 插件
mvcsitemapprovider
,不过今天小生也写了一个自己的案例,mvc
Web.sitemap
跨Areas,mvc
Web.sitemap
跨命名空间,仅供学习,大牛勿喷,小弟也是刚入门!代码如下:
二、步骤
1、新建一个 Web.sitemap 文件,url 包含了Controller+Action
2、新建一个类GetMvcSiteMap.cs ,如果用缓存,可以自己加上
3、html 页面调用,<li class="one">@Html.Raw(MVCSiteMap.GetMvcSiteMap("/Manager/AnswerFB/Index") )</li>
4、最终效果
二、步骤
1、新建一个 Web.sitemap 文件,url 包含了Controller+Action
<?xml version="1.0" encoding="utf-8" ?>
<
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>返回一串html代码,直接读取到html页面就可以了</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
;
}
}
![图片](https://i-blog.csdnimg.cn/blog_migrate/9cd24777f7b62126db1a9d1d1155f687.jpeg)
![图片](https://i-blog.csdnimg.cn/blog_migrate/cd2f739f9a9f0f661c461502d917e1ad.jpeg)