ASP.NET 2.0數(shù)據(jù)教程:給每個(gè)部分添加Default.aspx頁(yè)面
在我們的站點(diǎn)中這個(gè)課程被分成不同的分類-Basic Reporting,Filtering,Custom Formatting等等-每個(gè)分類有一個(gè)文件夾并且有對(duì)應(yīng)課程的aspx頁(yè)面。并且,每個(gè)文件夾里包含一個(gè)Default.aspx頁(yè)面。在這個(gè)默認(rèn)頁(yè)面中,將顯示這個(gè)部分的所有課程。比如,我們可以通過BasicReporting文件夾里的Default.aspx頁(yè)面連接到SimpleDisplay.aspx,DeclarativeParams.aspx和ProgrammaticParams.aspx。這里,我們可以再次使用SiteMap類和一個(gè)數(shù)據(jù)顯示控件顯示定義在Web.sitemap文件內(nèi)的站點(diǎn)地圖的信息。
讓我們?cè)俅问褂肦epeater顯示一個(gè)無序列表,不過這次我們會(huì)顯示指南的標(biāo)題和描述。我們需要在每個(gè)Default.aspx頁(yè)面重復(fù)這些標(biāo)記和代碼,我們可以將這個(gè)UI邏輯封裝成一個(gè)User Control。在站點(diǎn)中添加一個(gè)名為UserControls的文件夾并添加一個(gè)名為SectionLevelTutorialListing.ascx的Web用戶控件,它包含一下標(biāo)記:
Default.aspx頁(yè)面:向UserControls文件夾里添加新Web用戶控件
SectionLevelTutorialListing.ascx
- < %@ Control Language="C#" AutoEventWireup="true"
- CodeFile="SectionLevelTutorialListing.ascx.cs"
- Inherits="UserControls_SectionLevelTutorialListing" %>
- < asp:Repeater ID="TutorialList" runat="server" EnableViewState="False">
- < HeaderTemplate>< ul>< /HeaderTemplate>
- < ItemTemplate>
- < li>< asp:HyperLink runat="server"
- NavigateUrl="< %# Eval("Url") %>" Text="< %# Eval("Title")
- %>">< /asp:HyperLink>
- - < %# Eval("Description") %>< /li>
- < /ItemTemplate>
- < FooterTemplate>< /ul>< /FooterTemplate>
- < /asp:Repeater>
SectionLevelTutorialListing.ascx.cs
- using System;
- using System.Data;
- using System.Configuration;
- using System.Collections;
- using System.Web;
- using System.Web.Security;
- using System.Web.UI;
- using System.Web.UI.WebControls;
- using System.Web.UI.WebControls.WebParts;
- using System.Web.UI.HtmlControls;
- public partial class UserControls_SectionLevelTutorialListing : System.Web.UI.UserControl
- {
- protected void Page_Load(object sender, EventArgs e)
- {
- // If SiteMap.CurrentNode is not null,
- // bind CurrentNode ChildNodes to the GridView
- if (SiteMap.CurrentNode != null)
- {
- TutorialList.DataSource = SiteMap.CurrentNode.ChildNodes;
- TutorialList.DataBind();
- }
- }
- }
在前面的Repeater例子中我將SiteMap的數(shù)據(jù)綁定到Repeater上;當(dāng)然,這個(gè)SectionLevelTutorialListing用戶控件也將使用這種方法。在Page_Load事件里,有一個(gè)檢測(cè)程序以確保這是否是第一次訪問該頁(yè)面(不是返回)并且這個(gè)頁(yè)面的URL要映射到站點(diǎn)地圖中的一個(gè)節(jié)點(diǎn)。如果頁(yè)面使用了這個(gè)用戶控件,那么就沒有對(duì)應(yīng)的
< siteMapNode>,SiteMap.CurrentNode會(huì)返回null并且將沒有數(shù)據(jù)綁定到Repeater控件。假設(shè)我們有一個(gè)CurrentNode,我可以將它的ChildNodes集合綁定到這個(gè)Repeater。每個(gè)部分的Default.aspx頁(yè)面是這個(gè)部分內(nèi)教程的父節(jié)點(diǎn),這些代碼會(huì)展示每個(gè)部分內(nèi)教程的連接和描述,下面是屏幕截圖:
一旦這個(gè)Repeater創(chuàng)建好后,在設(shè)計(jì)視圖里打開每個(gè)文件夾的Default.aspx頁(yè)面,將這個(gè)用戶控件拖到你要顯示的地方。
圖14:用戶控件已經(jīng)添加到Default.aspx頁(yè)面上
圖15:Basic Reporting指南的列表
總結(jié)
完成站點(diǎn)地圖和母板頁(yè)后,現(xiàn)在我們的教程站點(diǎn)擁有統(tǒng)一的頁(yè)面布局和導(dǎo)航體系。盡管我們的站點(diǎn)有很多頁(yè)面,但是我們可以集中的更新站點(diǎn)頁(yè)面布局和站點(diǎn)導(dǎo)航信息。明確一點(diǎn),頁(yè)面布局信息在母板頁(yè)Site.master中定義,站點(diǎn)地圖在Web.sitemap中定義。我們不需要寫任何代碼就完成了站點(diǎn)頁(yè)面布局和導(dǎo)航機(jī)制,Visual Studio提供了所見即所得的設(shè)計(jì)時(shí)支持。
完成了數(shù)據(jù)訪問層和業(yè)務(wù)邏輯層并且定義了一個(gè)統(tǒng)一的頁(yè)面布局和站點(diǎn)導(dǎo)航系統(tǒng),下一步我們將探索通用報(bào)表模式。在接下來的三個(gè)指南里我們將會(huì)看到基本報(bào)表任務(wù)-用GridView,DetailsView和FormView控件顯示從業(yè)務(wù)邏輯層獲取的數(shù)據(jù)。
【編輯推薦】
- ASP.NET 2.0數(shù)據(jù)教程:給BLL類添加業(yè)務(wù)規(guī)則
- ASP.NET 2.0數(shù)據(jù)教程:通過BLL類訪問類型化數(shù)據(jù)集
- ASP.NET 2.0數(shù)據(jù)教程:創(chuàng)建BLL類
- ASP.NET編程中的實(shí)用技巧
- ASP.NET技巧小結(jié)