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开发中非常常用的,所以我们还是很有必要深刻掌握的,接下来还会发相关的文章,与大家一讨论学习!

(0)

相关推荐

  • 导致Asp.Net站点重启10个原因小结分析

    1. 回收应用程序池会导致站点重启,记录的原因是: HostingEnvironment initiated shutdown HostingEnvironment caused shutdown 2. 修改应用程序池回收规则会导致重启,记录的重启原因: HostingEnvironment initiated shutdown HostingEnvironment caused shutdown 3. 在IIS中修改站点的名字,不会导致重启 4. 修改站点根目录的配置文件web.config,

  • Asp.net给站点某目录增加Aspnet用户

    using System;using System.Data;using System.Configuration;using System.Collections;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Web.UI.HtmlControl

  • 分享下页面关键字抓取www.icbase.com站点代码(带asp.net参数的)

    复制代码 代码如下: <?php/** * HOST: www.icbase.com *///set_time_limit(0);// base functionfunction curl_get($url, $data = array(), $header = array(), $timeout = 15, $port = 80, $reffer = '', $proxy = ''){ $ch = curl_init(); if (!empty($data)) { $data = is_arr

  • asp.net 支持多语言站点的实现方法

    1,在web站点中新建两个resources文件如下 Resources.resx中的文件信息 Resources.en-us.resx中的文件信息 Default.aspx的代码 复制代码 代码如下: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" Culture="Aut

  • ASP.NET 站点地图(sitemap)简明教程

    还好,现在有这个机会,就权当自己的笔记吧!.以下讲一下最简单的创建形式. 站点地图,在每一个网站都必须用的一种技术.它是用来给用户导航作用的,以便告诉用户现在的位置.特别是对那些目录很深的网页,这种效果就犹为明显. 比如 天涯社区>天涯论坛>海口...这种形式. 1.新建一个站点地图(和新建aspx一样),tour.sitemap.下面是默认情况生成的xml文件. 复制代码 代码如下: <?xml version="1.0" encoding="u

  • 充分利用ASP.NET的三种缓存提高站点性能的注意方法

    ASP.NET提供三种主要形式的缓存:页面级输出缓存.用户控件级输出缓存(或称为片段缓存)和缓存API. 尽早缓存:经常缓存  您应该在应用程序的每一层都实现缓存.向数据层.业务逻辑层.UI或输出层添加缓存支持.内存现在非常便宜-因此,通过以智能的方式在整个应用程序中实现缓存,可以获得很大的性能提高. 页面级输出缓存 最简单的缓存形式,只是在内存中保留为响应请求而发送的HTML的副本. 要实现页面输出缓存,只要将一条OutputCache指令添加到页面即可. <%@ OutputCache Du

  • Asp.net中处理一个站点不同Web应用共享Session的问题

    1.问题描述: 系统S中有M1,M2,M3,M4四个模块,每个模块都是一个web应用.其中一个模块中设置Session后在其他模块中无法读取. 2.问题原因: 一个WEB应用相当于一个站点,应用与应用之间不可能共享Session. 3.解决方法: 1)  将四个web应用包含在同一个解决方案中 (注:调整.webinfo文件使解决方案能构正常运行) 2) 新建一个web应用Main,该web应用包含在解决方案S中,并直接存放在S目录下(即与虚拟目录S相对应). 3) 在Main应用中添加其他四个

  • 设置ASP.NET页面的运行超时时间详细到单个页面及站点

    全局超时时间 服务器上如果有多个网站,希望统一设置一下超时时间,则需要设置 Machine.config 文件中的 ExecutionTimeout 属性值. Machine.config 文件位于 %SystemRoot%\Microsoft.NET\Framework\%VersionNumber%\CONFIG\ 目录中. 例如: 复制代码 代码如下: <httpRuntime executionTimeout="90" maxRequestLength="409

  • asp.net Web站点风格切换的实现

    Web站点风格切换的实现 引言 Web站点的风格切换是很常见.也很受大家欢迎的功能,比如大家熟知的博客园就提供了几十款风格模板供大家选择.在Asp.Net中,我们可以通过模板页master page和主题theme来实现网站的风格切换,但是.Net提供的默认设置不够强大和灵活.本文将向大家介绍如何在.Net提供的方法上进行改进和扩展,以提供更加强大的网站风格切换功能. 效果预览:http://www.tracefact.net/Demo/StyleSetting/default.aspx NOT

  • asp.net 站点URLRewrite使用小记

    IIS收到请求-->ISAPI用于处理该请求-->BeginRequest开始-->EndRequest结束-->输出Response 中间有好多其它的流程就不标记了,这里只是列出URLRewrite所走的流程. 其实就是在BeginRequest事件中调用HttpContext的RewritePath方法,将该请求重新"定位"至一个目标URL就完成了. 在站点的Global.asax文件BeginRequest方法中添加代码: 复制代码 代码如下: publi

  • 如何建立ASP.NET站点

    其实对于建立ASP.NET站点小编刚开始也是一头雾水,经过网上查找资料进行了整理,下面分享给大家. 1. 建立站点专用用户(新建两个站点专用用户,hebcai.com 隶属于Guests 组,hebcai.com _wpg 则隶属于IIS_WPG(ASP.NET 专用用户). (1)从"我的电脑"的右键菜单中选择"管理",打开"计算机管理",从"本地用户的组"中选择"用户",然后从右侧列表窗口中的右键菜单中

随机推荐