<head id="Head1" runat="server">
<title>Master Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<table style="width: 100%; height: 100%" border="1">
<tr>
<td style="width: 10%">
<asp:TreeView ID="TreeView1" Runat="server" DataSourceID="SiteMapDataSource1"
ExpandDepth="2" ShowExpandCollapse="False" NodeIndent="10">
<LevelStyles>
<asp:TreeNodeStyle Font-Bold="True" Font-Underline="False"/>
<asp:TreeNodeStyle Font-Italic="True" Font-Underline="False" />
<asp:TreeNodeStyle Font-Size="X-Small" ImageUrl="bullet.gif" Font-Underline="False" />
</LevelStyles>
<NodeStyle ChildNodesPadding="10" />
</asp:TreeView>
</td>
<td style="width: 100px">
<asp:contentplaceholder id="ContentPlaceHolder1" runat="server">
</asp:contentplaceholder>
</td>
</tr>
</table>
<asp:SiteMapDataSource ID="SiteMapDataSource1" Runat="server"/>
</div>
</form>
</body>
</html>
在上面的代碼中,其中的TREEVIEW控件中的DATASORUCE屬性中,就指定了sitemapdatasource控件,并且在treeview控件中,也定義了不同結(jié)點的樣式。
在完成了masterpage頁面后,就等于已經(jīng)把網(wǎng)站的模版頁建立起來了,接下來就可以新建其他子頁面,以繼承masterpage頁面,并且新建各自頁面的內(nèi)容了。比如,新建一個default.aspx頁面,代碼如下:
<%@ Page Language="C#" MasterPageFile="Navigation.master" Title="Default Page"%>
<asp:Content ContentPlaceHolderID="ContentPlaceHolder1"
ID="Content1" Runat="Server">
This is the default page
</asp:Content>
可以看到,當建立了模版頁后,就可以新建其他的子頁面了,只需要在其中的contentplaceholderid中寫入不同的內(nèi)容就可以了。運行起來后,效果如圖:

接下來,我們來介紹如何將menu菜單控件和sitemapdatasource 控件配合使用。其中,我們在上面的例子的基礎(chǔ)上,在<table style="width: 100%; height: 100%" border="1">下面增加如下代碼就可以了,
<tr height="100px">
<td colspan="2" align="left">
<asp:Menu ID="Menu1" Runat="Server"
DataSourceID="SiteMapDataSource1">
</asp:Menu>
</td>
</tr>
其中,我們增加了一個menu控件,其中將其datasourceid屬性設(shè)定為sitemapdatasource1就可以了,運行如下圖,當然,我們可以改變menu控件的顯示位置,如可以將其改成垂直樣式顯示。

而對于我們經(jīng)常見到的顯示出頁面當前路徑的導(dǎo)航條功能,在asp.net 2.0中也可以輕易實現(xiàn),我們可以使用其中的sitemappath控件。我們緊接著在上文代碼中的menu控件下,增加如下代碼:
<tr height="100px">
<td colspan="2" align="left">
Currently Selected Page is:
<asp:SiteMapPath Runat="Server" ID="SiteMapPath1"></asp:SiteMapPath>
</td>
</tr>
要注意的是,只要增加sitemappath控件就可以了,因為它會自動和已經(jīng)增加的sitemapdatasource控件進行綁定的。我們?yōu)榱苏f明問題,另外增加一個頁面member.aspx,代碼如下:
<%@ Page Language="C#" MasterPageFile="Navigation.master" Title="Members Page"%>
<asp:Content ContentPlaceHolderID="ContentPlaceHolder1" ID="Content1" Runat="Server">
This is the members page
</asp:Content>
運行結(jié)果如下:

最后,我們看一下,如何通過編程的方式來獲取頁面導(dǎo)航中的相關(guān)數(shù)據(jù)。其中,必須引用到的是sitemap類,該類提供了很多相關(guān)的方法和屬性,最重要的是currentnode屬性,它可以指出當前用戶正在瀏覽的是哪一個欄目頁面,這用來跟蹤用戶在網(wǎng)站中的行動軌跡,并進行站點數(shù)據(jù)統(tǒng)計,有時是很有用的,舉例如下:
<%@ Page Language="C#" MasterPageFile="Navigation.master" Title="Members Page"%>
<script runat="Server">
void Page_Load(object sender, EventArgs e)
{
Response.Write("The currently selected root node is: " + SiteMap.CurrentNode.Description + "<br>");
Response.Write("The Parent for the currently selected node is : " +
SiteMap.CurrentNode.ParentNode.Description);
}
</script>
<asp:Content ContentPlaceHolderID="ContentPlaceHolder1" ID="Content1" Runat="Server">
This is the members page
</asp:Content>
在這個例子中,使用程序的方式,得出了用戶當前正在瀏覽的欄目頁面,以及該欄目的父欄目的名稱,運行結(jié)果如下圖:
