在ASP.NET  MVC 如此火热的时期,我竟然不适时宜的谈起ASP.NET ,恐怕会引来一阵嘲笑。最为无趣的是,讲解的竟然还是其中的一个控件。oh~~  my god!my out! ^_^

SiteMapPath 控件简介

SiteMapPath 控件是一种站点导航控件,反映了SiteMap 对象提供的数据。它提供了一种定位站点的方式,动态显示当前页在站点中的相对位置,并提供了从当前页向上跳转的快捷方式。

SiteMapPath 控件直接使用了站点地图(.sitemap)中配置的数据(无需通过SiteMapDataSource数据源控件)。

示例一:SiteMapPath 控件的简单使用

1、创建 Web.sitemap 文件

在您的网站的根目录中创建一个名为 Web.sitemap 的文件。

打开此 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="">
<siteMapNode url="Second.aspx" title="二页" description="" />
<siteMapNode url="Third.aspx" title="三页" description="" />
</siteMapNode>
</siteMap>

注意:
○  如果在url 属性值中,列出了不存在的 URL 或列出了重复的 URL,将导致请求Web 应用程序将失败。

○  如果在url 属性值中,添加了相关参数(如:url="Second.aspx?id=1"),也有可能导致请求Web 应用程序将失败。

○  在url 属性值中,可以“~/”快捷键开头,该快捷键表示应用程序根目录。

2、添加SiteMapPath 控件

向网页Default.aspx 添加站点导航控件,其代码如下:

<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
<title>Simple Navigation Controls</title>
</head>
<body>
<form id="form1" runat="server">
<h2>Using SiteMapPath</h2>
<asp:SiteMapPath ID="SiteMapPath1" Runat="server"></asp:SiteMapPath>
<!-- 此处的 SiteMapDataSource 控件是提供给TreeView 和 Menu 使用 -->
<asp:SiteMapDataSource ID="SiteMapDataSource1" Runat="server" />
<h2>Using TreeView</h2>
<asp:TreeView ID="TreeView1" Runat="Server" DataSourceID="SiteMapDataSource1" />
<h2>Using Menu</h2>
<asp:Menu ID="Menu2" Runat="server" DataSourceID="SiteMapDataSource1"/>
<h2>Using a Horizontal Menu</h2>
<asp:Menu ID="Menu1" Runat="server" DataSourceID="SiteMapDataSource1"
Orientation="Horizontal" StaticDisplayLevels="2" />
</form>
</body>
</html>

注意:

○  只要在页面上拖放SiteMapPath 控件,页面就会自动显示站点地图。

○  此处代码顺便演示了SiteMapDataSource 控件如何提供给TreeView 和 Menu 使用。

示例二:如何在根站点地图中添加子站点地图文件

默认情况下,ASP.NET 站点导航使用一个名为 Web.sitemap 的 XML 文件,该文件描述网站的层次结构。
但是,也有可能要使用多个站点地图文件或站点地图提供程序来描述整个网站的导航结构。

1、若要为一个站点配置多个子站点地图,首先在根目录的站点地图中设置子站点地图的节点。

在根站点地图Web.sitemap 中,将下面的 SiteMapNode 添加到文件的相应位置,代码如下:

<siteMapNode siteMapFile="~/News/News.sitemap" />

添加完以上节点后,根目录下的站点地图(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="">
<siteMapNode url="Second.aspx" title="二页" description="" />
<siteMapNode url="Third.aspx" title="三页" description="" />
<siteMapNode siteMapFile="~/News/News.sitemap" />
</siteMapNode>
</siteMap>

2、添加子站点,并创建相应的子目录的站点地图文件(News.sitemap),其代码如下:

<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
<siteMapNode url="~/News/NewsIndex.aspx" title="新闻首页" description="">
<siteMapNode url="~/News/Sports.aspx" title="体育新闻" description="" />
<siteMapNode url="~/News/Stars.aspx" title="明星新闻" description="" />
</siteMapNode>
</siteMap>

注意:子站点地图中,url 属性值一定要使用以“~/”快捷键开头的应用程序根目录路径,如:url="~/News/Stars.aspx"

示例三:如何动态修改站点地图sitemap 中的属性值

一个页面的内容要根据上一个页面所点击的链接来动态改变,这个倒是可以通过页面间的参数传递来实现。

但是,如果站点地图(如:BBS.sitemap)中,相关节点 < siteMapNode > 的 title 属性值也要根据所点击的链接来动态改变,则需要通过一定的编码来实现。

在此举例如下:

一个论坛首页(BBSIndex.aspx)上有相关版块的超链接(如:Java 版块链接、C# 版块链接、SQL 版块链接),点击某一个版块链接后,跳转到论坛主题(Topic.aspx)页面。而该论坛主题(Topic.aspx)页面套用了一个模板页(TopicMaster.master),该模板页(TopicMaster.master)中添加了SiteMapPath 控件,该控件用来显示当前页面的版块名称,而该名称的字符值是从站点地图(BBS.sitemap)中相对应的节点(siteMapNode)取其 title 属性值

其站点结构如下图所示:

BBS.sitemap 文件的代码如下:

<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
<siteMapNode url="~/BBS/BBSIndex.aspx" title="BBS首页" description="">
<siteMapNode url="~/BBS/Topic.aspx" title="" description="" />
</siteMapNode>
</siteMap>

注意:url="~/BBS/Topic.aspx" 的节点siteMapNode 其title 属性值为空字符串,它将通过在母版页(TopicMaster.master)中编码实现动态改变!

母版页(TopicMaster.master)的后台代码如下:

public partial class BBS_TopicMaster : System.Web.UI.MasterPage
{
protected void Page_Load(object sender, EventArgs e)
{
//当访问SiteMap.CurrentNode 属性时发生
SiteMap.SiteMapResolve += new SiteMapResolveEventHandler(SiteMap_SiteMapResolve);
Label1.Text = Request.QueryString["class"];
}
SiteMapNode SiteMap_SiteMapResolve(object sender, SiteMapResolveEventArgs e)
{
//当在母版中获得当前页面的Request对象时,必须使用如下方法:
HttpRequest currRequest = System.Web.HttpContext.Current.Request;
string _classQuerySteing = currRequest.QueryString["class"];
if (null != _classQuerySteing)
{
/* SiteMap.CurrentNode对象是 BBS.sitemap 文件的当前节点值。
* 而SiteMap.CurrentNode 对象在SiteMap类中只读,
* 所以克隆一个SiteMapNode,并修改其对象的Title属性值。
*/
SiteMapNode currMapNode = SiteMap.CurrentNode.Clone(false);
switch (_classQuerySteing)
{
case "java": currMapNode.Title = "Java 主题";
//currMapNode.Url = "Topic.aspx?class=java";
break;
case "csharp": currMapNode.Title = "C# 主题"; break;
case "sql": currMapNode.Title = "SQL 主题"; break;
default: currMapNode.Title = "无主题"; break;
}
return currMapNode;
}
else
{
return SiteMap.CurrentNode;
}
}
}

注意:

○  这里是通过在模板页中给SiteMap 对象添加事件:SiteMap.SiteMapResolve += new SiteMapResolveEventHandler 以实现对站点地图的动态修改,该事件将在当访问SiteMap.CurrentNode 属性时出发;

○  SiteMap.CurrentNode 对象是只读的,我通过对该对象的克隆来复制一个SiteMapNode 节点,并修改其Title 属性值。

关于ASP.NET 中站点地图sitemap 的使用的更多相关文章

  1. [Asp.net]站点地图SiteMap

    原文:[Asp.net]站点地图SiteMap 引言 在项目中发现使用站点地图的控件,之前没总结过这方面的东西,就写了一个demo测试了一下,这里记录一下,算是总结吧. Web.sitemap < ...

  2. 分享一个在线生成站点地图SiteMap制作工具

    站点地图SiteMap的好处是很大的,对Seo很有好处,能够更方便.迅速的让搜索引擎收录.WordPress 有不少生成Google Sitemap 的工具,但是有些只是针对WordPress的系统的 ...

  3. php生成百度站点地图sitemap.xml

    <?php header("Content-type:text/html;charset=utf-8"); //php生成百度站点地图sitemap.xml //http:/ ...

  4. Dynamics CRM2011/2013 站点地图sitemap的翻译

    实体.属性字段.ribbon等的翻译可以通过解决方案来解决(具体可见我前面的博客:http://blog.csdn.net/vic0228/article/details/37690913),但解决方 ...

  5. 织梦后台如何生成站点地图sitemap.xml

    第一步在网站根目录建立sitemap.php文件 内容如下: 写一个计划任务文件命名为generate_sitemap.php,放在/plus/task目录里,文件内容如下: <?php//定时 ...

  6. WordPress免插件生成完整站点地图(sitemap.xml)的php代码

    让这个代码更加完善,可以同时生成首页.文章.单页面.分类和标签的 sitemap! 一.PHP 代码 <?php require('./wp-blog-header.php'); header( ...

  7. 利用ASP.NET里自带的站点地图工具制作网站站点地图

    站点地图很方便能快速给我们导航我们要去访问的地址,能按层级关系分门别类,给用户一个很好的用户体验,很好的看到自己当前所在的网站位置 站点地图,又称网站地图,它就是一个页面,上面放置了网站上所有页面的链 ...

  8. [.NET领域驱动设计实战系列]专题九:DDD案例:网上书店AOP和站点地图的实现

    一.引言 在前面一专题介绍到,要让缓存生效还需要实现对AOP(面向切面编程)的支持.所以本专题将介绍了网上书店案例中AOP的实现.关于AOP的概念,大家可以参考文章:http://www.cnblog ...

  9. 使用windows服务更新站点地图

    由于公司平台访问人数逐渐增多,公司项目的数据库已经几次出现宕机现象.为减轻数据库压力,我上个月对公司项目做了下调整.把新闻板块提取出来单独一个站点,单独一个数据库.减少了主站点和数据库的负担和压力. ...

随机推荐

  1. OMXCodec与OMX事件处理流程

    学习了解Mutilmedia Framework有一段时间了,今天闲下来稍微整理整理.OMXCodec.cpp类属于libstagefright,在整个MM PF 相当OMX的适配层,供awesome ...

  2. RequireJs 深入理解

    原文   http://www.tuicool.com/articles/jam2Anv RequireJs已经流行很久了,我们在项目中也打算使用它.它提供了以下功能: 声明不同js文件之间的依赖 可 ...

  3. Thread.sleep(0)的意义& 多线程详解

    我们可能经常会用到 Thread.Sleep 函数来使线程挂起一段时间.那么你有没有正确的理解这个函数的用法呢?思考下面这两个问题: 假设现在是 2008-4-7 12:00:00.000,如果我调用 ...

  4. C#利用QrCode.Net生成二维码(Qr码)

    在网上很多应用都是用二维码来分享网址或者其它的信息.尤其在移动领域,二维码更是有很大的应用场景.因为项目的需要,需要在网站中增加一个生成二维码分析网址的功能,在谷歌大幅度抽筋的情况下无奈使用百度.百度 ...

  5. C# sql操作

    SqlConnection con = new SqlConnection(strSqlConnection);//strSqlConnection为字符串连接          DataTable ...

  6. jxl 使用

    public static void main(String args[]) {try {// 打开文件WritableWorkbook book = Workbook.createWorkbook( ...

  7. YUI的类型判断函数

    1.首先定义一个关于类型的对象,及相关变量 类型判断对象 ar L = Y.Lang || (Y.Lang = {}), STRING_PROTO = String.prototype, TOSTRI ...

  8. C# 创建execl文件 并且填充数据

    第一步:引用文件 using NPOI.HSSF.UserModel;using System.Data;using CTUClassLibrary;using System.IO;using NPO ...

  9. Fedora19/18/17安装显卡驱动和无限网卡驱动

    一.安装nvidia显卡驱动 1. 切换到root用户          su - 2. 确定当前Linux内核及SELinux policy 是否为最新          yum update ke ...

  10. wifi智能插座 一键扫描局域网内插座Ip及其它信息 Python源代码API

    转载请保留原地址. http://www.cnblogs.com/lsqandzy 最近买了几个智能插座玩,插座安装在家里,连接好wifi,不管你人在哪里,通过手机,一键开启或关闭插座电源,想象一下, ...