ASP.NET站点导航应用详解_实用技巧

 导航实际上给访问者提供了一个地图类似的东西,让访问者更快地找到想要的东西。

在2.0中引入了一个很重要的概念,那就是站点地图siteMap这样一个XML文件,但是它后缀不是XML。

若要为站点创建一致的、容易管理的导航解决方案,可以使用asp.net站点导航。asp.net站点导航提供下列功能:

在了解了一些基本知识后,我们来做一个简单的导航的例子。

1、首先创建一个master

html代码:

<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="mp.master.cs" Inherits="Navigation.mp" %> 

<!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 runat="server">
 <title></title>
 <asp:ContentPlaceHolder ID="head" runat="server">
 </asp:ContentPlaceHolder>
</head>
<body>
 <form id="form1" runat="server">
 <div>
  <table style="width: 656px; height: 255px">
   <tr>
    <td style="width: 500px; background-color: #99ccff">
      您当前的位置在: 

     <asp:SiteMapPath ID="SiteMapPath1" runat="server" Font-Names="Verdana"
      Font-Size="0.8em" PathSeparator=" : ">
      <CurrentNodeStyle ForeColor="#333333" />
      <NodeStyle Font-Bold="True" ForeColor="#990000" />
      <PathSeparatorStyle Font-Bold="True" ForeColor="#990000" />
      <RootNodeStyle Font-Bold="True" ForeColor="#FF8000" />
     </asp:SiteMapPath>
    </td>
   </tr>
   <tr>
    <td style="width: 500px">
     <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
     </asp:ContentPlaceHolder>
    </td>
   </tr>
   <tr>
    <td style="width: 500px; background-color: #ebebff">
     版权所有 。。。。。。。</td>
   </tr>
  </table>
 </div>
 </form>
</body>
</html> 

 显示的效果:

2、建立如下导航结构(统一应用上面的master)

3、添加站点地图(名称不可以改)

Web.sitemap下的代码如下:

<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
 <siteMapNode url="a.aspx" title="首页" description="1">
  <siteMapNode url="b.aspx" title="根目录B页" description="2" />
  <siteMapNode url="Default.aspx" title="Default页" description="3" />
  <siteMapNode url="" title="one目录" description="4">
  <siteMapNode url="~/one/a.aspx" title="one目录下的a" description="5"/>
  <siteMapNode url="~/one/b.aspx" title="one目录下的b" description="6"/>
  <siteMapNode url="" title="one目录下的once目录" description="7">
   <siteMapNode url="~/one/once/a.aspx" title="one目录下的once目录下的a" description="8"/>
   <siteMapNode url="~/one/once/b.aspx" title="one目录下的once目录下的b" description="9"/>
  </siteMapNode>
  </siteMapNode>
  <siteMapNode url="" title="two目录" description="10">
  <siteMapNode url="~/two/a.aspx" title="two目录下的a" description="11"/>
  <siteMapNode url="~/two/b.aspx" title="two目录下的b" description="12"/>
  </siteMapNode> 

  <siteMapNode url="sitemap.aspx" title="动态修改内存中" description="动态修改内存中的站点地图"/>
 </siteMapNode>
</siteMap> 

4、在根目录下a.aspx,放一个treeView控件。新建数据源为我们建立的站点地图。

运行后,我们便可以看到效果如图所示:

接下来会讲动态修改内存中的站点地图,什么叫动态修改内存中的站点地图,到底是什么意思呢?

例如文章列表中通常都有多篇,我们总不能把这些都放到站点地图中去,何况文章ID、栏目编号、商品分类或者商品ID也不是我们事先能够预料到的,那么站点地图里没有,外面就不能显示,该怎么办呢?这就需要用到动态修改内存中的站点地图了。
如上面提出的问题,我们假设有一个文章管理系统结构如下:
首页-新闻-国际新闻(列表)
那么可以假设国际新闻这一级的页面是list.aspx,不同的栏目会有不同的ID,那么地址结构就假设如下:
xxx.com--~/news/--list.aspx?id=3&page=12
这样一个结构,我们对新闻列表页的处理就可以只在站点地图中静态地写上url="~/news/list.aspx"。那么如果在别人浏览时呈现出上面的结构呢,我们接下来处理。
Web.sitemap:

<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
 <siteMapNode url="a.aspx" title="首页" description="1">
  <siteMapNode url="b.aspx" title="根目录B页" description="2" />
  <siteMapNode url="Default.aspx" title="Default页" description="3" />
  <siteMapNode url="" title="one目录" description="4">
  <siteMapNode url="~/one/a.aspx" title="one目录下的a" description="5"/>
  <siteMapNode url="~/one/b.aspx" title="one目录下的b" description="6"/>
  <siteMapNode url="" title="one目录下的once目录" description="7">
   <siteMapNode url="~/one/once/a.aspx" title="one目录下的once目录下的a" description="8"/>
   <siteMapNode url="~/one/once/b.aspx" title="one目录下的once目录下的b" description="9"/>
  </siteMapNode>
  </siteMapNode>
  <siteMapNode url="" title="two目录" description="10">
  <siteMapNode url="~/two/a.aspx" title="two目录下的a" description="11"/>
  <siteMapNode url="~/two/b.aspx" title="two目录下的b" description="12"/>
  </siteMapNode> 

  <siteMapNode url="sitemap.aspx" title="动态修改内存中" description="动态修改内存中的站点地图"/>
 </siteMapNode>
</siteMap> 

主要就是用到title为动态修改内存中的这一句来演示。
然后在演示页面sitemap.aspx中放一个SitemapPath控件,注意设置它的renderCurrentNodeAsLink为true(指示当前结点为链接)
页面的后台代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls; 

namespace Navigation
{
 public partial class sitemap : System.Web.UI.Page
 {
  protected void Page_Load(object sender, EventArgs e)
  {
   //首先我们在这里注册一个事件,也就是说在访问CurrentNode属性的时候触发这个事件
   SiteMap.SiteMapResolve+=new SiteMapResolveEventHandler(SiteMap_SiteMapResolve);
  }
  SiteMapNode SiteMap_SiteMapResolve(object sender,SiteMapResolveEventArgs e)
  {
   //我们自定义的处理方法 获取并创建当前节点的副本,并同时复制他的上级节点
   SiteMapNode CurrentNode = SiteMap.CurrentNode.Clone(true); 

   SiteMapNode TempNode = CurrentNode; 

   int id = nid();
   int page = npage(); 

   //从下面方法中得到变量
   if (id>0)
   {
    TempNode.Url = TempNode.Url + "?id=" + id.ToString();
   }
   if (id>0 && page>=0)
   {
    TempNode.Url = TempNode.Url + "&page=" + page.ToString();
   }
   else if (page>0)
   {
    TempNode.Url = TempNode.Url + "?page=" + page.ToString();
   }
   return TempNode;
  }
  //随便设置一个数。
  private int nid()
  {
   return 3;
  }
  private int npage()
  {
   return 12;
  }
 }
} 

解释:上面的nid()和npage(),是用来获取参数的两个方法,实际中根据实际情况而定。
运行,我们看看这个链接的属性:

到此,我们就很简单的实现了动态修改内存中的站点地图了!
站点导航,是我们在BS开发中非常常用的,所以我们还是很有必要深刻掌握的,接下来还会发相关的文章,与大家一讨论学习!

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索asp.net
站点导航
,以便于您获取更多的相关知识。

时间: 2024-08-25 03:38:00

ASP.NET站点导航应用详解_实用技巧的相关文章

asp.net FreeTextBox配置详解_实用技巧

如图所示:           这就是我们在网页上编辑文字时经常使用的东西. 用asp.net做网站时经常用到它,下面来讲讲如何在asp.net中添加freetextbox组件. 预备工作:下载freetextbox,可以去官网 http://freetextbox.com 上下载最新版本,也可以去gougou.com上下载个中文版. 压解后的 freetextbox.dll 文件就是我们要用到的. 现在开始配置: 1.打开vs2005,新建网站,在"解决方案"中的项目下点右键,选择&

asp.net运行原理 详解_实用技巧

主要类: System.Web.HttpRuntime System.Web.HttpApplicationFactory System.Web.HttpApplication System.Web.Compilation.BuildManager System.Web.Compilation.ApplicationBuildProvider System.Web.Compilation.BuildProvidersCompiler System.Web.UI.PageHandlerFactor

轻量级asp.net ajax解决方案详解_实用技巧

本文实例讲述了轻量级asp.net ajax解决方案.分享给大家供大家参考,具体如下: 跟shotdog老师研究探讨了下asp.net里,除官方庞大asp.net ajax之外的ajax解决方案.我们想法是以不同的服务器端方式输出,然后在页面使用jQuery的ajax实现调用服务器端几个解决方案: 1.使用一般的webform,在页面用jQuery ajax调用,再从取得的html数据中取得<body>内的内容,写入DOM 优点:不用改变现有的asp.net开发模式,可以使用现成的页面:aja

ASP.NET XmlDocument类详解_实用技巧

XmlDocument类是.NET框架的DOC解析器.XmlDocument将XML视为树状结构,它装载XML文档,并在内存中构建该文档的树状结构.下面来看下XmlDocument提供了哪些功能. 一.属性: Attributes 获取一个 XmlAttributeCollection,它包含该节点的属性. (继承自 XmlNode.) BaseURI     获取当前节点的基 URI. (重写 XmlNode..::.BaseURI.) ChildNodes 获取节点的所有子节点. (继承自

ASP.NET4 GridView的四种排序样式详解_实用技巧

与ASP.NET 的其他Web控件一能够,Gridview控件拥有很多不同的CSS样式属性设置,包括象CssClass,Font字体,ForeColor,BackColor,BackColor, Width, Height等等.Gridview还包括了一些应用在表格的行上的样式属性,比如RowStyle, AlternatingRowStyle, HeaderStyle,和PagerStyle,它们都提供了象CssClass和Font这些基本的属性设置.  在 ASP.NET 4.0中的Grid

ASP.NET MVC中使用jQuery时的浏览器缓存问题详解_实用技巧

介绍 尽管jQuery在浏览器ajax调用的时候对缓存提供了很好的支持,还是有必要了解一下如何高效地使用http协议. 首先要做的事情是在服务器端支持HTTP GET,定义不同的URL输出不同的数据(MVC里对应的就是action).如果要使用同一个地址获取不同的数据,那就不对了,一个HTTP POST也不行因为POST不能被缓存.许多开发人员使用POST主要有2个原因:明确了数据不能被缓存,或者是避免JSON攻击(JSON返回数组的时候可以被入侵). 缓存解释 jQuery全局对象里的ajax

.Net中的序列化和反序列化详解_实用技巧

序列化和反序列化相信大家都经常听到,也都会用, 然而有些人可能不知道:.net为什么要有这个东西以及.net Frameword如何为我们实现这样的机制, 在这里我也是简单谈谈我对序列化和反序列化的一些理解. 一.什么序列化和反序列化序列化通俗地讲就是将一个对象转换成一个字节流的过程,这样就可以轻松保存在磁盘文件或数据库中.反序列化是序列化的逆过程,就是将一个字节流转换回原来的对象的过程. 然而为什么需要序列化和反序列化这样的机制呢?这个问题也就涉及到序列化和反序列化的用途了, 对于序列化的主要

RabbitMQ .NET消息队列使用详解_实用技巧

本文实例为大家分享了RabbitMQ .NET消息队列使用方法,供大家参考,具体内容如下 首先下载安装包,我都环境是win7 64位: 去官网下载 otp_win64_19.0.exe  和rabbitmq-server-3.6.3.exe安装好 然后开始编程了: (1)创建生产者类: class Program { private static void Main() { //建立RabbitMQ连接和通道 var connectionFactory = new ConnectionFacto

ASP.NET MVC数组模型绑定详解_实用技巧

在ASP.NET MVC中使用Razor语法可以在视图中方便地展示数组,如果要进行数组模型绑定,会遇到索引断裂问题,如下示例: <input type="text" name="[0].Name" /> <input type="text" name="[1].Name" /> <input type="text" name="[2].Name" />