当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > 在ASP.NET 2.0中使用页面导航控件

ASP.NET
Asp.net利用JQuery弹出层加载数据代码
asp.net dataview做无限极分类的又一用法
asp.net ckeditor编辑器的使用方法
告别ADO.NET实现应用系统无缝切换的烦恼(总结篇)
asp.net 实现动态显示当前时间(不用javascript不考虑开销)
.net动态显示当前时间(客户端javascript)
asp.net 结合YUI 3.0小示例
asp.net 取消缓存相关问题说明
asp.net 计划任务管理程序实现,多线程任务加载
ASP.NET 跨页面传值方法
asp.net中url地址传送中文参数时的两种解决方案
Asp.net 菜单控件简洁版
asp.net jQuery Ajax用户登录功能的实现
asp.net SharpZipLib的压缩与解压问题
asp.net url重写后页面回传问题
asp.net与Discuz!NT整合集成实例教程
Discuz!NT 3与asp.net 整合的实例教程
测试控制台使用方法
.net 动态标题实现方法
asp.net *.ashx类型的文件使用说明

在ASP.NET 2.0中使用页面导航控件


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-23   浏览: 136 ::
收藏到网摘: n/a

几乎每个网站里,为了方便用户在网站中进行页面导航,都少不了使用页面导航控件。有了页面导航的功能,用户可以很方便地在一个复杂的网站中进行页面之间的跳转。在以往的WEB编程中,要写一个好的页面导航功能,并不是那么容易的,也要使用一些技巧。而在asp.net2.0中,为了方便进行页面导航,新增了一个叫做页面导航控件sitemapdatasource,其中还可以绑定到不同的其他页面控件,比如treeview,menu等,十分灵活,使到能很方便地实现页面导航的不同形式,而且还提供了运行时的编程接口,可以以编程的形式动态实现页面导航控件。本文将简单以几个例子来介绍一下在asp.net2.0中如何实现页面导航。

页面导航的结构和sitemapdatasource控件

在asp.net2.0中,要实现页面导航,应该先以xml的形式,提供出整个网站的页面结构层次。我们可以编写一个叫web.sitemap的XML文本文件,在该文件中定义出整个要导航页面的结构层次。举例如下:

<?xmlversion="1.0"encoding="utf-8"?>

<siteMap>

 <siteMapNodetitle="Default"description="Home"url="Default.aspx">

<siteMapNodetitle="Members"description="Members"url="Members.aspx">

 <siteMapNodetitle="MyAccount"description="MyAccount"url="MyAccount.aspx"/>

 <siteMapNodetitle="Products"description="Products"url="Products.aspx"/>

</siteMapNode>

<siteMapNodetitle="Administration"description="Administration"url="~/Admin/Default.aspx">

 <siteMapNodetitle="Customer"description="CustomerAdmin"url="~/Admin/Customer/default.aspx"/>

 <siteMapNodetitle="ProductsAdmin"description="ProductsAdmin"url="~/Admin/ProductsAdmin.aspx"/>

</siteMapNode>

 </siteMapNode>

</siteMap>

我们可以看到,其中,web.sitemap文件必须包含根结点sitemap。而且,设置一个父sitemapnode结点,该结点表明是默认的站点首页,在该父sitemapnode结点下,可以有若干个子sitemapnode结点,分别按层次结构代表了网站的各子栏目(留意一下上例中,各个子结点之间的包含关系)。而每一个sitemapnode结点中,有如下若干个属性:

1)URL属性:该属性指出要导航的栏目的地址链接,在web.sitemap中定义中,必须是每个栏目的相对地址。

2)Title属性:该属性指出每个子栏目的名称,显示在页面中。

3)Description属性:该属性指定时,则用户在鼠标移动到该栏目时,出现有关该栏目的相关提示,类似于tooltips属性。

在设计好sitemap属性后,接下来就可以一步步构建页面导航功能了,主要有两个步骤:

1)向页面中添加sitemapdatasource控件。该控件会自动感应绑定web.sitemap中的内容。

2)将sitemapdatasource控件绑定到如sitemappath,treeview,menu等控件中,也就是说,将它们的数据源设置为该sitemapdatasource控件。

知道了方法后,我们下面就分别以treeview,menu,sitemappath三种控件为例子,介绍一下如何和sitemapdatasource控件进行配合使用。

先来介绍使用treeview控件和sitemapdatasource控件配合使用的方法。Treeview树形列表控件十分适合于用来做页面导航,为了能具体说明,我们充分利用asp.net中的masterpage控件,先搭建出一个网站的基本框架架构。

在visualwebdeveloper2005beta1中,新建一个网站,之后添加上文的web.sitemap文件,再添加一个名叫Navigation的master类型的页面,代码如下:

<%@MasterLanguage="C#"%>

<htmlxmlns="www.w3.org/1999/xhtml">

<headid="Head1"runat="server">

<title>MasterPage</title>

</head>

<body>

 <formid="form1"runat="server">

<div>

<tablestyle="width:100%;height:100%"border="1">

<tr>

 <tdstyle="width:10%">

<asp:TreeViewID="TreeView1"Runat="server"DataSourceID="SiteMapDataSource1"

ExpandDepth="2"ShowExpandCollapse="False"NodeIndent="10">

 <LevelStyles>

<asp:TreeNodeStyleFont-Bold="True"Font-Underline="False"/>

<asp:TreeNodeStyleFont-Italic="True"Font-Underline="False"/>

<asp:TreeNodeStyleFont-Size="X-Small"ImageUrl="bullet.gif"Font-Underline="False"/>

 </LevelStyles>

 <NodeStyleChildNodesPadding="10"/>

</asp:TreeView>

 </td>

 <tdstyle="width:100px">

<asp:contentplaceholderid="ContentPlaceHolder1" runat="server">

</asp:contentplaceholder>

 </td>

</tr>

 </table>

 <asp:SiteMapDataSourceID="SiteMapDataSource1"Runat="server"/>

 </div>

</form>

</body>

</html>

在上面的代码中,其中的TREEVIEW控件中的DATASORUCE属性中,就指定了sitemapdatasource控件,并且在treeview控件中,也定义了不同结点的样式。

在完成了masterpage页面后,就等于已经把网站的模版页建立起来了,接下来就可以新建其他子页面,以继承masterpage页面,并且新建各自页面的内容了。比如,新建一个default.aspx页面,代码如下:

<%@PageLanguage="C#"MasterPageFile="Navigation.master"Title="DefaultPage"%>

<asp:ContentContentPlaceHolderID="ContentPlaceHolder1"

ID="Content1"Runat="Server">

Thisisthedefaultpage

</asp:Content>

可以看到,当建立了模版页后,就可以新建其他的子页面了,只需要在其中的contentplaceholderid中写入不同的内容就可以了。

接下来,我们来介绍如何将menu菜单控件和sitemapdatasource控件配合使用。其中,我们在上面的例子的基础上,在<tablestyle="width:100%;height:100%"border="1">下面增加如下代码就可以了


<trheight="100px">

<tdcolspan="2"align="left">

<asp:MenuID="Menu1"Runat="Server"

DataSourceID="SiteMapDataSource1">

</asp:Menu>

</td>

</tr>

其中,我们增加了一个menu控件,其中将其datasourceid属性设定为sitemapdatasource1就可以了,运行如下图,当然,我们可以改变menu控件的显示位置,如可以将其改成垂直样式显示。

  而对于我们经常见到的显示出页面当前路径的导航条功能,在asp.net2.0中也可以轻易实现,我们可以使用其中的sitemappath控件。我们紧接着在上文代码中的menu控件下,增加如下代码:

 
<trheight="100px">

<tdcolspan="2"align="left"> 

CurrentlySelectedPageis:

<asp:SiteMapPathRunat="Server"ID="SiteMapPath1"></asp:SiteMapPath>

</td>

</tr>

要注意的是,只要增加sitemappath控件就可以了,因为它会自动和已经增加的sitemapdatasource控件进行绑定的。我们为了说明问题,另外增加一个页面member.aspx,代码如下:

<%@PageLanguage="C#"MasterPageFile="Navigation.master"Title="MembersPage"%>

<asp:ContentContentPlaceHolderID="ContentPlaceHolder1"ID="Content1"Runat="Server">

Thisisthememberspage

</asp:Content>

 最后,我们看一下,如何通过编程的方式来获取页面导航中的相关数据。其中,必须引用到的是sitemap类,该类提供了很多相关的方法和属性,最重要的是currentnode属性,它可以指出当前用户正在浏览的是哪一个栏目页面,这用来跟踪用户在网站中的行动轨迹,并进行站点数据统计,有时是很有用的,举例如下:

<%@PageLanguage="C#"MasterPageFile="Navigation.master"Title="MembersPage""%>

<scriptrunat="Server"> 

voidPage_Load(objectsender,EventArgse)
{

 Response.Write("Thecurrentlyselectedrootnodeis:"+SiteMap.CurrentNode.Description+"<br>");

 Response.Write("TheParentforthecurrentlyselectednodeis:"+

 SiteMap.CurrentNode.ParentNode.Description);

}

</script>

<asp:ContentContentPlaceHolderID="ContentPlaceHolder1"ID="Content1"Runat="Server">

Thisisthememberspage

</asp:Content>

在这个例子中,使用程序的方式,得出了用户当前正在浏览的栏目页面,以及该栏目的父栏目的名称。