先从Menu菜单开始。这文章引用自Qhttp://www.cnblogs.com/xiaolin/archive/2006/12/11/589339.html
在ASP.NET 2.0?strong style="background-color: rgb(255, 255, 255);">使用面D控g
ASP.NET 2.0中?strong>sitemapdatasource面D控g
几乎每个|站里,Z方便用户在网站中q行面DQ都不?span style="background-color: rgb(255, 255, 255);">使用面D控g。有了页面导航的功能Q用户可以很方便地在一个复杂的|站中进行页面之间的跌{。在以往的WEB~程中,要写一个好的页面导航功能,q不是那么容易的Q也要用一些技巧。而在asp.net 2.0中,Z方便q行面DQ新增了一个叫做页面导航控?strong style="color: black; background-color: rgb(255, 255, 102);">sitemapdatasource,sitemapdatasource中还可以l定C同的其他面控gQ比如treeview,menu{,十分灉|Q到能很方便地实现面D的不同Ş式,而且q提供了q行时的~程接口Q可以以~程的Ş式动态实现页面导航控件。本文将单以几个例子来介l一下在asp.net 2.0?strong style="color: black; background-color: rgb(255, 255, 102);">sitemapdatasource如何实现面D?
面D的结构和sitemapdatasource控g
在asp.net 2.0中,要实现页面导航,应该先以xml的Ş式,提供出整个网站的面l构层次。我们可以编写一个叫web.sitemap的XML文本文gQ?在该文g中定义出整个要导航页面的l构层次。D例如下:(x)
1 Q?xml version="1.0" encoding="utf-8" ?Q?br />
2 QsiteMapQ?br />
3 QsiteMapNode title="Default" description="Home" url="Default.aspx" Q?br />
4 QsiteMapNode title="Members" description="Members" url="Members.aspx"Q?br />
5 QsiteMapNode title="My Account" description="My Account" url="MyAccount.aspx" /Q?br />
6 QsiteMapNode title="Products" description="Products" url="Products.aspx" /Q?br />
7 Q?siteMapNodeQ?br />
8 QsiteMapNode title="Administration" description="Administration" url="~/Admin/Default.aspx"Q?br />
9 QsiteMapNode title="Customer" description="Customer Admin" url="~/Admin/Customer/default.aspx" /Q?br />
10 QsiteMapNode title="Products Admin" description="Products Admin" url="~/Admin/ProductsAdmin.aspx" /Q?br />
11 Q?siteMapNodeQ?br />
12 Q?siteMapNodeQ?br />
13 Q?siteMapQ?/span>
我们可以看到Q其中,web.sitemap文g必须包含根结点sitemap。而且Q设|一个父sitemapnodel点Q该l点表明?
默认的站炚w,在该父sitemapnodel点下,可以有若q个子sitemapnodel点Q分别按层次l构代表了网站的各子栏目Q留意一下上?
中,各个子结点之间的包含关系Q。而每一个sitemapnodel点中,有如下若q个属性:(x)
-
URL属性:(x)该属性指D的栏目的地址链接Q在web.sitemap中定义中Q必L每个栏目的相对地址?/li>
-
Title属性:(x)该属性指出每个子栏目的名Uͼ昄在页面中?/li>
-
Description属性:(x)该属性指定时Q则用户在鼠标移动到该栏目时Q出现有兌栏目的相xC,cM于tooltips属性?/li>
在设计好sitemap属性后Q接下来可以一步步构徏面D功能了,主要有两个步骤:(x)
- 向页面中dsitemapdatasource控g。该控g?x)自动感应绑定web.sitemap中的内容?/li>
- ?strong style="color: black; background-color: rgb(255, 255, 102);">sitemapdatasource控gl定到如sitemappath,treeview,menu{控件中Q也是_(d)它们的数据源设|ؓ(f)?strong style="color: black; background-color: rgb(255, 255, 102);">sitemapdatasource控g?/li>
知道了方法后Q我们下面就分别以treeview,menu,sitemappath三种控gZ子,介绍一下如何和sitemapdatasource控gq行配合使用?br />
先来介绍使用treeview控g?strong style="color: black; background-color: rgb(255, 255, 102);">sitemapdatasource 控g配合使用的方法。Treeview?wi)Ş列表控g十分适合于用来做面DQؓ(f)了能具体说明Q我们充分利用asp.net中的masterpage控gQ先搭徏Z个网站的基本框架架构?br />
在visual web developer 2005 beta 1中,新徏一个网站,之后d上文的web.sitemap文gQ再d一个名叫Navigation的mastercd的页面,代码如下Q?br />
1 Q?@ Master Language="C#" %Q?br />
2 Qhtml xmlns="http://www.w3.org/1999/xhtml" Q?br />
3 Qhead id="Head1" runat="server"Q?br />
4 QtitleQMaster PageQ?titleQ?br />
5 Q?headQ?br />
6 QbodyQ?br />
7 Qform id="form1" runat="server"Q?br />
8 QdivQ?br />
9 Qtable style="width: 100%; height: 100%" border="1"Q?br />
10 QtrQ?br />
11 Qtd style="width: 10%"Q?br />
12 Qasp:TreeView ID="TreeView1" Runat="server" DataSourceID="SiteMapDataSource1"
13 ExpandDepth="2" ShowExpandCollapse="False" NodeIndent="10"Q?br />
14 QLevelStylesQ?br />
15 Qasp:TreeNodeStyle Font-Bold="True" Font-Underline="False"/Q?br />
16 Qasp:TreeNodeStyle Font-Italic="True" Font-Underline="False" /Q?br />
17 Qasp:TreeNodeStyle Font-Size="X-Small" ImageUrl="bullet.gif" Font-Underline="False" /Q?br />
18 Q?LevelStylesQ?br />
19 QNodeStyle ChildNodesPadding="10" /Q?br />
20 Q?asp:TreeViewQ?br />
21 Q?tdQ?br />
22 Qtd style="width: 100px"Q?br />
23 Qasp:contentplaceholder id="ContentPlaceHolder1" runat="server"Q?br />
24 Q?asp:contentplaceholderQ?br />
25 Q?tdQ?br />
26 Q?trQ?br />
27 Q?tableQ?br />
28 Qasp:SiteMapDataSource ID="SiteMapDataSource1" Runat="server"/Q?br />
29 Q?divQ?br />
30 Q?formQ?br />
31 Q?bodyQ?br />
32 Q?htmlQ?/span>
在上面的代码中,其中的TREEVIEW控g中的DATASORUCE属性中Q就指定?strong style="color: black; background-color: rgb(255, 255, 102);">sitemapdatasource控gQƈ且在treeview控g中,也定义了不同l点的样式?br />
在完成了masterpage面后,q于已l把|站的模版页建立h了,接下来就可以新徏其他子页面,以承masterpage面Qƈ且新建各自页面的内容了。比如,新徏一个default.aspx面Q代码如下:(x)
1 Q?@ Page Language="C#" MasterPageFile="Navigation.master" Title="Default Page"%Q?br />
2 Qasp:Content ContentPlaceHolderID="ContentPlaceHolder1"
3 ID="Content1" Runat="Server"Q?br />
4 This is the default page
5 Q?asp:ContentQ?/span>
可以看到Q当建立了模版页后,可以新建其他的子页面了Q只需要在其中的contentplaceholderid中写入不同的内容可以了。运行v来后Q效果如图:(x)
接下来,我们来介l如何将menu菜单控g?strong style="color: black; background-color: rgb(255, 255, 102);">sitemapdatasource 控g配合使用。其中,我们在上面的例子的基上,在<table style="width: 100%; height: 100%" border="1"Q下面增加如下代码就可以了,
1 Qtr height="100px"Q?br />
2 Qtd colspan="2" align="left"Q?br />
3 Qasp:Menu ID="Menu1" Runat="Server"
4 DataSourceID="SiteMapDataSource1"Q?br />
5 Q?asp:MenuQ?br />
6 Q?tdQ?br />
7 Q?trQ?/span>
其中Q我们增加了一个menu控gQ其中将其datasourceid属性设定ؓ(f)sitemapdatasource1可以了Q运行如下图Q当?dng)我们可以改变menu控g的显CZ|,如可以将其改成垂直样式显C?br />
而对于我们经常见到的昄出页面当前\径的D条功能,在asp.net 2.0中也可以L实现Q我们可以用其中的sitemappath控g。我们紧接着在上文代码中的menu控g下,增加如下代码Q?br />
1 Qtr height="100px"Q?br />
2 Qtd colspan="2" align="left"Q?br />
3 Currently Selected Page is:
4 Qasp:SiteMapPath Runat="Server" ID="SiteMapPath1"Q</asp:SiteMapPathQ?br />
5 Q?tdQ?br />
6 Q?trQ?/span>
要注意的是,只要增加sitemappath控g可以了Q因为它?x)自动和已经增加?strong style="color: black; background-color: rgb(255, 255, 102);">sitemapdatasource控gq行l定的。我们ؓ(f)了说明问题,另外增加一个页面member.aspx,代码如下Q?br />
1 Q?@ Page Language="C#" MasterPageFile="Navigation.master" Title="Members Page"%Q?br />
2 Qasp:Content ContentPlaceHolderID="ContentPlaceHolder1" ID="Content1" Runat="Server"Q?br />
3 This is the members page
4 Q?asp:ContentQ?/span>
q行l果如下Q?br />
最后,我们看一下,如何通过~程的方式来获取面D中的相关数据。其中,必须引用到的是sitemapc,该类提供了很多相关的Ҏ(gu)和属
性,最重要的是currentnode属性,它可以指出当前用h在浏览的是哪一个栏目页面,q用来跟t用户在|站中的行动轨迹Qƈq行站点数据l计Q有
时是很有用的QD例如下:(x)
1 Q?@ Page Language="C#" MasterPageFile="Navigation.master" Title="Members Page"%Q?br />
2 Qscript runat="Server"Q?br />
3 void Page_Load(object sender, EventArgs e)
4 {
5 Response.Write("The currently selected root node is: " + SiteMap.CurrentNode.Description + "QbrQ?);
6 Response.Write("The Parent for the currently selected node is : " +
7 SiteMap.CurrentNode.ParentNode.Description);
8 }
9 Q?scriptQ?br />
10 Qasp:Content ContentPlaceHolderID="ContentPlaceHolder1" ID="Content1" Runat="Server"Q?br />
11 This is the members page
12 Q?asp:ContentQ?/span>
在这个例子中Q用程序的方式Q得Z用户当前正在览的栏目页面,以及(qing)该栏目的父栏目的名称Q运行结果如下图Q?br />
可以看出Q在asp.net 2.0中,实现面D的功能十分灵z而且方便Q功能十分强大,更多的功能请参考MSDN?br />
SiteMapDataSource c?
注意Q此cd .NET Framework 2.0 版中是新增的?
提供了一个数据源控gQW(xu)eb 服务器控件及(qing)其他控g可用该控gl定到分层的站点地图数据?br />
SiteMapDataSource 控g是站点地图数据的数据源,站点数据则由为站炚w|的站点地图提供E序q行存储?strong style="color: black; background-color: rgb(255, 255, 102);">SiteMapDataSource
佉K些ƈ非专门作为站点导航控件的 Web 服务器控Ӟ?TreeView、Menu ?DropDownList
控gQ能够绑定到分层的站点地图数据。可以用这?Web 服务器控件将站点地图昄一个ؓ(f)目录Q或者对站点q行d式导航。当?dng)?zhn)也可以使用
SiteMapPath 控gQ该控g被专门设计ؓ(f)一个站点导航控Ӟ因此不需?SiteMapDataSource 控g的实例?br />
SiteMapDataSource l定到站点地图数据, q基于在站点地图层次l构中指定的起始节点昄其视图。默认情况下Qv始节Ҏ(gu)层次l构的根节点Q但也可以是层次l构中的M其他节点。v始节点由以下几个 SiteMapDataSource 属性的值来标识Q?br />
起始节点
属性?br />
层次l构的根节点Q默认设|)?br />
StartFromCurrentNode ?false?br />
未设|?StartingNodeUrl?br />
表示当前正在查看的页的节炏V?br />
StartFromCurrentNode ?true?br />
未设|?StartingNodeUrl?br />
层次l构的特定节炏V?br />
StartFromCurrentNode ?false?br />
已设|?StartingNodeUrl?br />
如果 StartingNodeOffset 属性设|ؓ(f)?0 的|则它?x)?jing)响v始节点以?qing)?SiteMapDataSource
控gZ该节点公开的站点地图数据层ơ结构。StartingNodeOffset 的gؓ(f)一个负整数或正整数Q该值标识从
StartFromCurrentNode ?StartingNodeUrl
属性所标识的v始节Ҏ(gu)站点地图层次l构上移或下Uȝ层敎ͼ以便Ҏ(gu)据源控g公开的子?wi)的起始节点q行偏移?br />
如果
StartingNodeOffset 属性设|ؓ(f)负数 -nQ则p数据源控件公开的子?wi)的起始节点是所标识的v始节点上?n
个别的上节点。如?n 的值大于层ơ结构树(wi)中所标识起始节点上方的所有上U层U数Q则子树(wi)的v始节Ҏ(gu)站点地图层次l构的根节点?br />
如果 StartingNodeOffset 属性设|ؓ(f)正数 +nQ则公开的子?wi)的起始节点是位于所标识的v始节点下?n 个别的子节炏V由于层ơ结构中可能存在多个子节点的分支Q因此,如果可能Q?strong style="color: black; background-color: rgb(255, 255, 102);">SiteMapDataSource
?x)尝试根据所标识起始节点与表C当前被h늚节点之间的\径,直接解析子节炏V如果表C当前被h늚节点不在所标识起始节点的子?wi)中Q则忽略
StartingNodeOffset 属性的倹{如果表C当前被h늚节点与位于其上方的所标识起始节点之间的层U差距小?n
个别,则用当前被h作v始节炏V?br />
站点地图数据是从 SiteMapProvider 对象Q如作ؓ(f) ASP.NET 的默认站点地图提供程序的 XmlSiteMapProviderQ中(g)索的。可指定为站炚w|的M提供E序?SiteMapDataSource 提供站点地图数据Qƈ且通过讉K SiteMap.Providers 集合可获得可用提供程序的列表?br />
与所有数据源控g一PSiteMapDataSource
的每个实例都与单个帮助器对象兌Q该帮助器对象称为数据源视图。SiteMapDataSourceView
是一个基于站点地图数据的视图Q根据数据源的属性进行设|,q且通过调用 GetHierarchicalView
Ҏ(gu)来检索此视图。SiteMapDataSourceView l护控g所l定到的 SiteMapNodeCollection 对象?
默认情况下,起始节点是层ơ结构的根节点,但是(zhn)可v始节点设|ؓ(f)M节点。v始节点可以是相对于站点地图中当前位置的一个节点,或者是相对于某个绝对位|的节点。通过讄 StartingNodeUrl 属性可指定起始节点?
SiteMapDataSource 专用于导航数据,q且不支持排序、筛选、分|~存之类的常规数据源操作Q也不支持更新、插入或删除之类的数据记录操作?
CZ
下面的代码示例演C如何以声明方式使用 SiteMapDataSource 控g?TreeView 控gl定C个站点地图。该站点地图数据从根节点U别开始检索?br />
C#
1 <%@ Page Language="C#" %>
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
4 <HTML>
5 <BODY>
6 <FORM runat="server">
7 <asp:SiteMapDataSource
8 id="SiteMapDataSource1"
9 runat="server" />
10
11 <asp:TreeView
12 id="TreeView1"
13 runat="server"
14 DataSourceID="SiteMapDataSource1">
15 </asp:TreeView>
16
17 </FORM>
18 </BODY>
19 </HTML>
Visual Basic
1 <%@ Page Language="VB" %>
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3 <HTML>
4 <BODY>
5 <FORM runat="server">
6 <asp:SiteMapDataSource
7 id="SiteMapDataSource1"
8 runat="server" />
9
10 <asp:TreeView
11 id="TreeView1"
12 runat="server"
13 DataSourceID="SiteMapDataSource1">
14 </asp:TreeView>
15
16 </FORM>
17 </BODY>
18 </HTML>
J#
1 <%@ Page Language="VJ#" %>
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
4 <HTML>
5 <BODY>
6 <FORM runat="server">
7 <asp:SiteMapDataSource
8 id="SiteMapDataSource1"
9 runat="server">
10 </asp:SiteMapDataSource>
11
12 <asp:TreeView
13 id="TreeView1"
14 runat="server"
15 DataSourceID="SiteMapDataSource1">
16 </asp:TreeView>
17
18 </FORM>
19 </BODY>
20 </HTML>
原文出处:http://www.ad0.cn/netfetch/article.asp?id=285

]]>