在ASP.NET 2.0中使用頁面導航控制項

來源:互聯網
上載者:User
幾乎每個網站裡,為了方便使用者在網站中進行頁面導航,都少不了使用頁面導航控制項。有了頁面導航的功能,使用者可以很方便地在一個複雜的網站中進行頁面之間的跳轉。在以往的WEB編程中,要寫一個好的頁面導航功能,並不是那麼容易的,也要使用一些技巧。而在asp.net 2.0中,為了方便進行頁面導航,新增了一個叫做頁面導航控制項sitemapdatasource,其中還可以綁定到不同的其他頁面控制項,比如treeview,menu等,十分靈活,使到能很方便地實現頁面導航的不同形式,而且還提供了運行時的編程介面,可以以編程的形式動態實現頁面導航控制項。本文將簡單以幾個例子來介紹一下在asp.net 2.0中如何?頁面導航。

  頁面導航的結構和sitemapdatasource控制項

  在asp.net 2.0中,要實現頁面導航,應該先以xml的形式,提供出整個網站的頁面結構層次。我們可以編寫一個叫web.sitemap的XML文字檔,在該檔案中定義出整個要導航頁面的結構層次。舉例如下:

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

  <siteMap>

   <siteMapNode title="Default" description="Home" url="Default.aspx" >

  <siteMapNode title="Members" description="Members" url="Members.aspx">

   <siteMapNode title="My Account" description="My Account" url="MyAccount.aspx" />

   <siteMapNode title="Products" description="Products" url="Products.aspx" />

  </siteMapNode>

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

   <siteMapNode title="Customer" description="Customer Admin" url="~/Admin/Customer/default.aspx" />

   <siteMapNode title="Products Admin" description="Products Admin" 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控制項,先搭建出一個網站的基本架構架構。

  在visual web developer 2005 beta 1中,建立一個網站,之後添加上文的web.sitemap檔案,再添加一個名叫Navigation的master類型的頁面,代碼如下:

  <%@ Master Language="C#" %>

  <html xmlns="www.w3.org/1999/xhtml" >

  <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控制項中,也定義了不同結點的樣式。

  在完成了masterpage頁面後,就等於已經把網站的模版頁建立起來了,接下來就可以建立其他子頁面,以繼承masterpage頁面,並且建立各自頁面的內容了。比如,建立一個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中寫入不同的內容就可以了。運行起來後,效果

   接下來,我們來介紹如何將menu菜單控制項和sitemapdatasource 控制項配合使用。其中,我們在上面的例子的基礎上,在<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屬性設定為sitemapdatasource1就可以了,運行如,當然,我們可以改變menu控制項的顯示位置,如可以將其改成垂直樣式顯示。

  而對於我們經常見到的顯示出頁面當前路徑的導航條功能,在asp.net 2.0中也可以輕易實現,我們可以使用其中的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控制項就可以了,因為它會自動和已經增加的sitemapdatasource控制項進行綁定的。我們為了說明問題,另外增加一個頁面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>

  運行結果如下:

  最後,我們看一下,如何通過編程的方式來擷取頁面導航中的相關資料。其中,必須引用到的是sitemap類,該類提供了很多相關的方法和屬性,最重要的是currentnode屬性,它可以指出目前使用者正在瀏覽的是哪一個欄目頁面,這用來跟蹤使用者在網站中的行動軌跡,並進行網站資料統計,有時是很有用的,舉例如下:

  <%@ 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>

  在這個例子中,使用程式的方式,得出了使用者當前正在瀏覽的欄目頁面,以及該欄目的父欄目的名稱,運行結果如:

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.