`

ASP.NET中的站点导航技术

    博客分类:
  • .NET
阅读更多

 

1.站点地图

 

(站点地图文件) 是一个名为Web.Sitemap的XML文件,ASP.NET 3.5内置了一个站点地图提供者的提供者类XmlSiteMapProvider,它将查找应用程序根目录下的Web.Sitemap文件(所以Web.Sitemap文件必须位于应

用程序根目录下且文件名称不能改),然后提取文件中的站点地图数据,并创建相应的SiteMap对象,

SiteMapDataSource将使用这些SiteMap对象向那些导航控件如(TreeView等)提供导航信息。

 

鼠标在站点上单击右键--"添加新项"--"站点地图文件",添加的Web.Sitemap内容如下:

<?xml version="1.0" encoding="utf-8" ?>

<siteMap xmlns="http://schemas.microsoft.com/Aspnet/SiteMap-File-1.0" >

<siteMapNode url="" title="" description="">

   <siteMapNode url="" title="" description="" />

   <siteMapNode url="" title="" description="" />

<siteMapNode url="" title="" description="">

</siteMapNode>

</siteMap>

ASP.NET中有一个反映站点地图结构的静态对象SiteMap,该对象就对应了站点地图。它公开

SiteMapNode对象的集合,用于表示站点地图文件中的每一个节点。SiteMap的所有成员都是静态的,

因此无需实例化SiteMap对象。

SiteMap.CurrentNode 返回一个SiteMapNode对象,表示当点节点。

SiteMap.RootNode 返回一个SiteMapNode对象,表示根节点。

得到了SiteMapNode对象 如SiteMapNode Node=SiteMap.RootNode

Node.ParentNode (返回当前节点的上一级节点,如果当前节点是根节点,返回null)

Node.HasChildNodes (判断当前节点是否有子节点)

Node.ChildNodes (返回当前节点中所有子节点的集合)

Node.PreviousSibling (返回当前节点的上一个兄弟节点,无则返回null)

Node.NextSibling (返回当前节点的下一个兄弟节点,无则返回null)

 

1.1使用SiteMapPath控件来显示站点的导航路径。

SiteMapPath可以根据在Web.sitemap定义的数据自动地显示网站的路径,但只有在站点地图中列出的

页才能在SiteMapPath控件中显示导航数据。如果将SiteMapPath控件放置在站点地图中未列出的页上,

该控件不会向客户端显示任何数据。可以将该控件添加到母板页中,这样所有的子页面(站点地图中有),

只要应用了母板页,就都有导航效果。SiteMapPath控件之所以能够直接访问Web.sitemap文件,是

因为它直接工作在ASP.NET导航模型之上。

 

 

1.2 URL地址映射

一些情况下,开发人员可能希望隐藏真实的网页地址,特别是一些保密性要求强的网站,此时使用地址映射就很有必要。

另外开发人员希望保持网页的友好性,为用户提供友好易记的URL,以便于用户能很轻松地记住所访问的网页。

可以在web.config中使用<urlMappings>块来设置:

<configuration>

  <system.web>

   <urlMappings enable="true">

    <add url="~/Category.aspx" mappedUrl="~/Default.aspx?catepory=12" />

   </urlMappings>

    ...

   </system.web>

</configuration>

mappedUrl表示真实地址  url表是映射的地址

 

 

2 使用TreeView控件导航

 

 

2.1 TreeView控件可以直接绑定到SiteMapDataSource控件中来显示导航数据,将TreeView的数据源设

置为SiteMapDataSource即可(当然前提是建立了Web.sitemap站点地图)。SiteMapDataSource是从站

点地图提供者XmlSiteMapProvider检索站点地图数据的。

 

2.2 可以通过编程的方式把Web.sitemap站点地图里的地图数据加载到TreeView控件里。

经过添加的TreeView生成的主要代码如下:

<asp:TreeView ID="TreeView1" runat="server">

<Nodes>

  <asp:TreeNode NavigateUrl="~/WebForm1.aspx" Text="首页" Value="首页">

  <asp:TreeNode NavigateUrl="~/WebForm2.aspx" Text="食品" Value="食品">

  <asp:TreeNode Text="桂林米粉" ToolTip="桂林的米粉" Value="桂林米粉"></asp:TreeNode>

  <asp:TreeNode NavigateUrl="~/WebForm5.aspx" Text="饮料" ToolTip="桂林的饮料" Value="饮料"></asp:TreeNode>

  </asp:TreeNode>

  <asp:TreeNode NavigateUrl="~/NewFolder1/WebForm3.aspx" Text="服饰" Value="服饰">

  <asp:TreeNode NavigateUrl="~/NewFolder1/WebForm4.aspx" Text="ADIDAS" 

  ToolTip="美国名牌" Value="ADIDAS"></asp:TreeNode>

  </asp:TreeNode>

  </asp:TreeNode>

  </Nodes>

  </asp:TreeView>

 

可以看出TreeView与SiteMap类非常类似,TreeView有一个Nodes属性,TreeView.Nodes表示的是TreeView控件的节点的集合,TreeNode表示一个节点,它有一个ChildNodes属性,表示当前节点的子节点集合。由于它们都是集合,所以可以用Add Remove Count等集合方法来操作。如

TreeNode rootnode=new TreeNode(".NET");

TreeView1.Nodes.Add(rootnode);

为TreeView1添加一个Text属性为.NET的(上面也看到了,还有NavigateUrl等属性)节点。

TreeNode  childnode=new TreeNode("ASP");又创建一个节点

childnode.ChildNode.Add(new TreeNode("PSA"));

为childnode创建一个子节点

rootnode.ChildNode.Add(childnode); 把childnode加入到rootnode之下

这样一来,层次是 .NET--ASP--PSA

刚才提到了NavigateUrl属性,当NavigateUrl属性被指定后,该节点为导航模式(点击该节点时导航到指定页面,不会触发SelectNodeChanged事件)。当没有设置NavigateUrl属性,该节点为选中模式(点击该点时,将产生一个页面回送并触发TreeView.SelectNodeChanged事件)。

 

实现代码:

 

protected void Page_Load(object sender, EventArgs e)

        {

            if (!Page.IsPostBack)

            {

                //初始化根节点

                TreeNode node = new TreeNode("首页", "", "", "~/WebForm1.aspx","");

                //SiteMap.RootNode将返回站点地图的根节点,为一个SiteMapNode对象

                //LoadSiteMap用来把SiteMapNode里的Title等属性添加到TreeNode对象里

                LoadSiteMap(SiteMap.RootNode, node);

                TreeView3.Nodes.Add(node);

            }

        }

        protected void LoadSiteMap(SiteMapNode smn, TreeNode tn)

        {

            //求出SiteMapNode对象的节点数

            int count = smn.ChildNodes.Count;

            for (int i = 0; i < count; i++)

            {

             //把SiteMapNode里的Title等属性添加到新创建的TreeNode对象里

                TreeNode node = new TreeNode(smn.ChildNodes[i].Title, "", "", smn.ChildNodes[i].Url, "");

             //把创建的TreeNode对象作为子节点添加到它父节点中

                tn.ChildNodes.Add(node);

             //如果子节点还有节点的话,递归调用方法

                if (smn.ChildNodes[i].HasChildNodes)

                {

                    LoadSiteMap(smn.ChildNodes[i], node);

                }

            }

        }

 

 

TreeView绑定XML文件

 

TreeView控件通过与XmlDataSource控件结合,使绑定XML文件变得非常简单。

把XmlDataSource拖到设计视图后,从其任务窗口中配置数据源。然后把TreeView控件的数据源

设置为XmlDataSource,为了使显示更好,当TreeView控件绑定到一个数据源控件后,在任务栏里

会增加一个名为编辑TreeNode节点数据绑定的任务项,可以非常方便的设计节点。

 

 

TreeNode的PopulateOnDemand属性

 

<asp:TreeView ID="TreeView1" runat="server" ExpandDepth="0"(展开的层次)

ontreenodepopulate="TreeView1_TreeNodePopulate">

 <Nodes>

  <asp:TreeNode Text="桂林米粉" PopulateOnDemand="true"></asp:TreeNode>

 </Nodes>

</asp:TreeView>

TreeView的TreeNode节点的PopulateOnDemand属性设为true时,当单击该节点时会触发

TreeView1_TreeNodePopulate事件,在该事件里可以动态添加TreeNode节点,实现按需添加节点的效果。

 

 

带复选框的TreeView控件

如果一个TreeNode节点没有设置链接属性,那么当我们单击该节点的时候会触发TreeView的

SelectedNodeChanged事件,其实还有一个前提,就是该节点的SelectAction属性(如果TreeView没有绑定数据源控件在其任务菜单的编辑节点里改,如果绑定了数据源控件在其任务栏菜单的编辑TreeNode数据绑定里改)设为了select,还有其他属性值none(那么该节点就不能被点击)Expand(点击该节点会切换其展开和折叠状态,还会引发TreeView的TreeNodeExpanded事件或TreeNodeCollapsed事件)

无论是TreeView还是TreeNode都有ShowCheckBoxs属性,TreeView的ShowCheckBoxs有All Leaf None Parent Root等属性值,TreeNode的ShowCheckBoxs有true和false的选择,将给相应的TreeNode前加上复选框,我们就可以获得用户选择了哪些节点:

  if (TreeView1.CheckedNodes.Count>0)

   {

      label1.text="当前选择了如下节点:"+"<br />"

      foreach (TreeNode item in TreeView1.CheckedNodes)

         {

           label1.text += item.Text+"<br />";

         }

   }

   else

      {

         label1.text="没有选择节点";

      }

 

 

3.使用Menu控件导航

 

先看Menu控件的代码:

<asp:Menu ID="Menu1" runat="server">

 <Items>

   <asp:MenuItem Text="首页" Value="首页"></asp:MenuItem>

   <asp:MenuItem Text="NBA球队" Value="NBA球队">

   <asp:MenuItem Text="洛杉矶湖人" Value="洛杉矶湖人"></asp:MenuItem>

   <asp:MenuItem Text="波士顿凯尔特人" Value="波士顿凯尔特人"></asp:MenuItem>

   </asp:MenuItem>

   <asp:MenuItem Text="CBA球队" Value="CBA球队">

   <asp:MenuItem Text="新疆广汇" Value="新疆广汇"></asp:MenuItem>

   </asp:MenuItem>

  </Items>

</asp:Menu>

与TreeView的构造非常相似,所以Menu很多方面的操作与TreeView是相同的。可以很轻松地绑定到

SiteMapDataSource控件来实现导航,具体做法与TreeView相同。不过有一点要注意,因为站点地图里

只能有一个根节点,也就是说,只有根节点自己位于最上层,Menu有一个属性StaticDisplayLevels是用

来设置菜单中静态显示几层,默认为1,那么进入页面时,在鼠标没进入菜单时只能先显示一层,所以

StaticDisplayLevels最好是选大于1,能显示多层菜单,其余菜单是动态模式,只有鼠标滑过时才显示,有个属性是MaximumDynamicDisplayLeves,用来设置当鼠标滑过时那些动态模式的菜单能显示几层。另外Menu的Orientation属性用来控制菜单是水平效果还是垂直效果。

其他如通过XMLDataSource绑定到XML文件与TreeView是一样的。

不过很重要的一点是浏览器的兼容性问题,对于Menu控件,好像谷歌浏览器是不支持的,在IE8下也只有在兼容性视图下才能显示正常http://www.cnblogs.com/blodfox777/archive/2008/09/08/1286582.html


分享到:
评论

相关推荐

    第9章 ASP.NET中的站点导航技术

    在ASP.NET中,站点导航技术对于构建大型企业级网站至关重要,因为它提供了用户友好的界面,使用户能够轻松地在网站的各个页面之间导航。ASP.NET 3.5引入了内置的站点地图和一些高级服务器控件,如TreeView和Menu,以...

    asp.net的主题及导航模板

    在这个主题及导航的示例中,我们关注的是如何通过ASP.NET来实现界面的美观设计和用户友好的导航功能。以下是对这个话题的详细解释: 1. ASP.NET 主题: ASP.NET的主题允许开发者为整个网站或应用程序定义一致的...

    asp.net导航条

    ASP.NET 导航条是构建Web应用程序中常用的一种组件,用于提供网站的层级结构和页面间的导航链接。在ASP.NET框架中,导航条通常由服务器控件如TreeView、Menu或NavigationBar来实现,这些控件可以帮助开发者创建动态...

    ASP.NET 站点地图向网站添加站点导航

    ASP.NET站点地图是一种强大的工具,用于为Web应用程序创建和管理导航结构。它允许开发者构建一个清晰、层次化的网站布局,使用户能够轻松地找到所需的信息。在Visual Studio 2008中,站点地图功能被集成,使得创建和...

    比较好看的导航菜单(ASP.NET)

    本文将深入探讨如何利用ASP.NET技术和jQuery库来构建一个具有吸引力的导航菜单。ASP.NET是一种强大的Web应用程序框架,而jQuery则是一个轻量级的JavaScript库,两者结合可以实现动态、交互式的网页效果。 首先,ASP...

    ASP.NET网址导航 v1.0.zip

    在本文中,我们将深入探讨ASP.NET的核心概念、开发环境以及如何构建类似的网址导航应用。 ASP.NET是微软推出的用于构建动态网站、Web应用和Web服务的框架。它提供了一种模型驱动的编程方式,简化了Web开发流程。在...

    ASP.NET 导航控件

    在ASP.NET 2.0版本中,引入了一组强大的导航控件,极大地增强了用户界面的交互性和可用性。这些控件允许开发者轻松创建功能丰富的网站导航结构,使用户能够方便地浏览和定位网页内容。 导航控件包括以下几种: 1. ...

    ASP.NET 2.0站点地图搭建网站导航结构(chm)

    在ASP.NET 2.0中,站点地图(SiteMap)是一个强大的功能,它为创建和维护网站的导航结构提供了方便。通过站点地图,开发者可以清晰地定义网站的层次结构,为用户提供直观的导航体验,同时也可以方便地实现面包屑导航...

    ASP.NET 2.0开发技术大全

    包括认识ASP.NET 2.0、ASP.NET 2.0网页语法、字符串与日期处理、Page对象、...中的应用、高性能数据处理技术、ADO.NET数据库技术、数据绑定控件、ASP.NET数据缓存技术、站点导航和导航控件、Web用户控件、创建ASP.NET...

    asp.net网站导航

    `&lt;asp:Menu&gt;`控件是一个用于显示站点导航结构的强大工具,它可以自动生成一个包含链接的导航菜单。此控件支持多种布局方式(如水平或垂直),并且可以很容易地定制样式和行为。例如,在给定的代码片段中: ```html ...

    asp.net站点导航 讲解ppt

    ASP.NET站点导航是构建Web应用程序时非常重要的一个方面,它帮助用户轻松地浏览网站的各个部分。在ASP.NET中,站点导航主要通过站点地图(Web.sitemap)和一系列的导航控件来实现。本章主要讲解如何利用这些工具构建...

    asp.net导航站源码

    在这个“asp.net导航站源码”中,我们很显然关注的是一个使用ASP.NET技术构建的网络导航站点的源代码。 导航站通常包含一系列链接,帮助用户方便地访问各种互联网服务和热门网站。它们可能是按类别分类的,比如新闻...

    asp.net数据库项目案例导航

    在本案例导航中,你将学习到以下ASP.NET的关键知识点: 1. **基础概念**:了解ASP.NET的基本架构,包括页面生命周期、控件模型和事件处理机制,这些都是构建动态网页的基础。 2. **C#编程**:ASP.NET通常与C#语言...

    ASP.NET基础教程

    本书结合实例,全面系统地介绍了ASP.NET 2.0应用开发技术,包括ASP.NET 2.0服务器控件,ASP.NET 2.0数据源控件和新的数据绑定方法,验证控件,样式、外观和主题,母版页,站点导航和导航控件,ASP.NET 2.0的身份验证...

    ASP.NET主题、母版页和站点导航

    介绍ASP.NET主题、母版页和站点导航的基本概念和应用

    ASP .NET 2.0站点编程指南

    《ASP .NET 2.0站点编程指南》深入浅出地讲解了ASP.NET 2.0框架下的网站开发技术,涵盖了母版页、站点导航、用户控件等核心特性,以及安全性、性能优化等方面的知识。对于希望掌握ASP.NET 2.0开发技巧的程序员来说,...

    Asp.net站点地图

    ASP.NET2.0的导航系统确实给web开发带来方便,但是用过的用户就会发现导航系统有一个很大的缺陷:他需要你手工编写web.sitemap,web.sitemap的语法是“相当的简单”,但是实际运用时,虽然简单,对于稍微复杂的导航...

    ASP.NET中英文双语企业网站后台源码

    ASP.NET的Master Pages技术可以定义全局布局,各个内容页可以通过继承Master Page实现一致的头部、导航和脚部。 6. **错误处理和日志记录**:为了保证系统的稳定性和可维护性,源码中可能有错误捕获和日志记录的...

    树形asp.net模板

    综合以上内容,这个"树形asp.net模板"不仅展示了如何使用JavaScript和ASP.NET构建动态的无限级菜单,还涵盖了数据库操作和版本迁移等实际开发中常见的技术挑战。对于学习和理解ASP.NET Web开发,以及提升Web应用的...

    ASP.NET文件参考 asp.net asp.net技巧

    ASP.NET是微软公司开发的一种用于构建动态网站、Web应用程序和Web服务的技术,它基于.NET Framework,为开发者提供了强大而高效的应用程序开发环境。本文件参考将深入探讨ASP.NET的核心概念、关键特性和实用技巧。 ...

Global site tag (gtag.js) - Google Analytics