|
系列文章導(dǎo)航:
ASP.NET 2.0數(shù)據(jù)教程之一:創(chuàng)建一個(gè)數(shù)據(jù)訪問(wèn)層
ASP.NET 2.0數(shù)據(jù)教程之二:創(chuàng)建一個(gè)業(yè)務(wù)邏輯層
ASP.NET 2.0數(shù)據(jù)教程之三:母板頁(yè)和站點(diǎn)導(dǎo)航
ASP.NET 2.0數(shù)據(jù)教程之四:使用ObjectDataSource展現(xiàn)數(shù)據(jù)
ASP.NET 2.0數(shù)據(jù)教程之五:聲明參數(shù)
ASP.NET 2.0數(shù)據(jù)教程之六:編程設(shè)置ObjectDataSource的參數(shù)值
ASP.NET 2.0數(shù)據(jù)教程之七:使用DropDownList過(guò)濾的主/從報(bào)表
ASP.NET 2.0數(shù)據(jù)教程之八:使用兩個(gè)DropDownList過(guò)濾的主/從報(bào)表
ASP.NET 2.0數(shù)據(jù)教程之九:跨頁(yè)面的主/從報(bào)表
ASP.NET 2.0數(shù)據(jù)教程之十:使用 GridView 和DetailView實(shí)現(xiàn)的主/從報(bào)表
ASP.NET 2.0數(shù)據(jù)教程之十一:基于數(shù)據(jù)的自定義格式化
ASP.NET 2.0數(shù)據(jù)教程之十二:在GridView控件中使用TemplateField
在ASP.NET 2.0中操作數(shù)據(jù)::母板頁(yè)和站點(diǎn)導(dǎo)航
導(dǎo)言
通常,用戶友好的個(gè)性化站點(diǎn)都有著一致的,站點(diǎn)統(tǒng)一的頁(yè)面布局和導(dǎo)航體系。ASP.NET 2.0引入的兩個(gè)新特性給我們?cè)诮y(tǒng)一站點(diǎn)的頁(yè)面布局和站點(diǎn)導(dǎo)航上提供了簡(jiǎn)單而有效的工具,它們是母板頁(yè)和站點(diǎn)導(dǎo)航。母板頁(yè)允許開(kāi)發(fā)者創(chuàng)建統(tǒng)一的站點(diǎn)模板和指定的可編輯區(qū)域。這樣,ASPx頁(yè)面只需要給模板頁(yè)中指定的可編輯區(qū)域提供填充內(nèi)容就可以了,所有在母板頁(yè)中定義的其他標(biāo)記將出現(xiàn)在所有使用了該母板頁(yè)的ASPx頁(yè)面中。這種模式允許開(kāi)發(fā)者可以統(tǒng)一的管理和定義站點(diǎn)的頁(yè)面布局,因此可以容易的得到擁有統(tǒng)一的視覺(jué)和感覺(jué)的頁(yè)面并且還易于更新。
站點(diǎn)導(dǎo)航系統(tǒng)允許開(kāi)發(fā)者定義站點(diǎn)地圖并提供了API以便通過(guò)程序查詢站點(diǎn)地圖信息。新的導(dǎo)航控件包括Menu,TreeView和SiteMapPath,這樣可以很容易的在一個(gè)一般的導(dǎo)航用戶界面元素里呈現(xiàn)全部或者部分站點(diǎn)地圖。我們將使用默認(rèn)的站點(diǎn)導(dǎo)航提供者,這意味著我們的站點(diǎn)地圖將定義在一個(gè)xml格式的文件中。
為說(shuō)明這些觀念并且使我們的教程的示例站點(diǎn)可用性更佳,讓我們通過(guò)本次課程定義一個(gè)站點(diǎn)統(tǒng)一的頁(yè)面布局,實(shí)現(xiàn)一個(gè)站點(diǎn)地圖,并且添加導(dǎo)航UI。在這個(gè)課程結(jié)束時(shí)我們的課程示例站點(diǎn)就擁有一個(gè)優(yōu)美的設(shè)計(jì)效果了。
圖1:本課程的最終成果
系列文章導(dǎo)航:
ASP.NET 2.0數(shù)據(jù)教程之一:創(chuàng)建一個(gè)數(shù)據(jù)訪問(wèn)層
ASP.NET 2.0數(shù)據(jù)教程之二:創(chuàng)建一個(gè)業(yè)務(wù)邏輯層
ASP.NET 2.0數(shù)據(jù)教程之三:母板頁(yè)和站點(diǎn)導(dǎo)航
ASP.NET 2.0數(shù)據(jù)教程之四:使用ObjectDataSource展現(xiàn)數(shù)據(jù)
ASP.NET 2.0數(shù)據(jù)教程之五:聲明參數(shù)
ASP.NET 2.0數(shù)據(jù)教程之六:編程設(shè)置ObjectDataSource的參數(shù)值
ASP.NET 2.0數(shù)據(jù)教程之七:使用DropDownList過(guò)濾的主/從報(bào)表
ASP.NET 2.0數(shù)據(jù)教程之八:使用兩個(gè)DropDownList過(guò)濾的主/從報(bào)表
ASP.NET 2.0數(shù)據(jù)教程之九:跨頁(yè)面的主/從報(bào)表
ASP.NET 2.0數(shù)據(jù)教程之十:使用 GridView 和DetailView實(shí)現(xiàn)的主/從報(bào)表
ASP.NET 2.0數(shù)據(jù)教程之十一:基于數(shù)據(jù)的自定義格式化
ASP.NET 2.0數(shù)據(jù)教程之十二:在GridView控件中使用TemplateField
步驟1:創(chuàng)建母板頁(yè)
第一步是為我們的站點(diǎn)創(chuàng)建母板頁(yè)。到目前為止我們的站點(diǎn)只有一個(gè)類型化的DataSet(Northwind.xsd,位于App_Code文件夾),業(yè)務(wù)邏輯層類庫(kù)(ProductsBLL.cs,CategoriesBLL.cs等等,這些都在App_Code文件夾里),數(shù)據(jù)庫(kù)(NORTHWIND.MDF,位于App_Data文件夾),配置文件(web.config),和一個(gè)CSS文件(Style.css)。
我整理這些頁(yè)面和文件以說(shuō)明前面兩次課程中介紹的數(shù)據(jù)訪問(wèn)層和業(yè)務(wù)邏輯層將會(huì)在以后課程的更多細(xì)節(jié)中重用這些示例。
圖2:我們項(xiàng)目中的文件
要?jiǎng)?chuàng)建一個(gè)母板頁(yè),用右鍵點(diǎn)擊解決方案管理器中的項(xiàng)目名稱并選擇添加新項(xiàng)。然后從模板列表窗口中選擇母板類型并且命名為Site.master
圖3:添加一個(gè)母板頁(yè)到站點(diǎn)中
在母板頁(yè)中定義站點(diǎn)統(tǒng)一的頁(yè)面布局。你可以用設(shè)計(jì)視圖定義你需要的布局或者控件,你還可以手動(dòng)的在代碼視圖中添加標(biāo)記。在我們的母板頁(yè)中使用了定義在外部文件Style.css中的層疊樣式表來(lái)定義位置和風(fēng)格。也許你不知道下面這些標(biāo)記怎樣顯示,樣式表規(guī)則定義了導(dǎo)航用的<div>標(biāo)簽中的內(nèi)容絕對(duì)定位在頁(yè)面的左邊并且寬度固定為200像素。
1



%>
2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

系列文章導(dǎo)航:
ASP.NET 2.0數(shù)據(jù)教程之一:創(chuàng)建一個(gè)數(shù)據(jù)訪問(wèn)層
ASP.NET 2.0數(shù)據(jù)教程之二:創(chuàng)建一個(gè)業(yè)務(wù)邏輯層
ASP.NET 2.0數(shù)據(jù)教程之三:母板頁(yè)和站點(diǎn)導(dǎo)航
ASP.NET 2.0數(shù)據(jù)教程之四:使用ObjectDataSource展現(xiàn)數(shù)據(jù)
ASP.NET 2.0數(shù)據(jù)教程之五:聲明參數(shù)
ASP.NET 2.0數(shù)據(jù)教程之六:編程設(shè)置ObjectDataSource的參數(shù)值
ASP.NET 2.0數(shù)據(jù)教程之七:使用DropDownList過(guò)濾的主/從報(bào)表
ASP.NET 2.0數(shù)據(jù)教程之八:使用兩個(gè)DropDownList過(guò)濾的主/從報(bào)表
ASP.NET 2.0數(shù)據(jù)教程之九:跨頁(yè)面的主/從報(bào)表
ASP.NET 2.0數(shù)據(jù)教程之十:使用 GridView 和DetailView實(shí)現(xiàn)的主/從報(bào)表
ASP.NET 2.0數(shù)據(jù)教程之十一:基于數(shù)據(jù)的自定義格式化
ASP.NET 2.0數(shù)據(jù)教程之十二:在GridView控件中使用TemplateField
步驟2:給站點(diǎn)添加一個(gè)主頁(yè)
定義母板頁(yè)后,我們準(zhǔn)備給站點(diǎn)添加一些ASPx頁(yè)面。讓我們從添加我們的首頁(yè)Degault.ASPx開(kāi)始吧。在解決方案管理器中右鍵點(diǎn)擊項(xiàng)目名稱并且選擇添加新建項(xiàng)目。從模板列表中選擇Web Form選項(xiàng)并且命名為Default.ASPx。并且,勾上“選擇母板頁(yè)”的復(fù)選框。
圖5:添加一個(gè)新Web Form并且勾上“選擇母板頁(yè)”的復(fù)選框
點(diǎn)擊確定按鈕后,將會(huì)詢問(wèn)你新建的這個(gè)ASPx頁(yè)面使用哪個(gè)母板頁(yè)。也許你有多個(gè)母板頁(yè)在你的項(xiàng)目中,但是我們只有一個(gè)。
圖6:選擇你要使用的母板頁(yè)
選擇母板頁(yè)后,新建的ASPx會(huì)包含下面這些標(biāo)記:
Default.ASPx
1



CodeFile="Default.ASPx.cs" Inherits="_Default" Title="Untitled Page" %>
2

3

4

系列文章導(dǎo)航:
ASP.NET 2.0數(shù)據(jù)教程之一:創(chuàng)建一個(gè)數(shù)據(jù)訪問(wèn)層
ASP.NET 2.0數(shù)據(jù)教程之二:創(chuàng)建一個(gè)業(yè)務(wù)邏輯層
ASP.NET 2.0數(shù)據(jù)教程之三:母板頁(yè)和站點(diǎn)導(dǎo)航
ASP.NET 2.0數(shù)據(jù)教程之四:使用ObjectDataSource展現(xiàn)數(shù)據(jù)
ASP.NET 2.0數(shù)據(jù)教程之五:聲明參數(shù)
ASP.NET 2.0數(shù)據(jù)教程之六:編程設(shè)置ObjectDataSource的參數(shù)值
ASP.NET 2.0數(shù)據(jù)教程之七:使用DropDownList過(guò)濾的主/從報(bào)表
ASP.NET 2.0數(shù)據(jù)教程之八:使用兩個(gè)DropDownList過(guò)濾的主/從報(bào)表
ASP.NET 2.0數(shù)據(jù)教程之九:跨頁(yè)面的主/從報(bào)表
ASP.NET 2.0數(shù)據(jù)教程之十:使用 GridView 和DetailView實(shí)現(xiàn)的主/從報(bào)表
ASP.NET 2.0數(shù)據(jù)教程之十一:基于數(shù)據(jù)的自定義格式化
ASP.NET 2.0數(shù)據(jù)教程之十二:在GridView控件中使用TemplateField
設(shè)置@Page指令的Title屬性為Home并且添加一些歡迎詞到Content控件中:
Default.ASPx
1



CodeFile="Default.ASPx.cs" Inherits="_Default" Title="Home" %>
2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

系列文章導(dǎo)航:
ASP.NET 2.0數(shù)據(jù)教程之一:創(chuàng)建一個(gè)數(shù)據(jù)訪問(wèn)層
ASP.NET 2.0數(shù)據(jù)教程之二:創(chuàng)建一個(gè)業(yè)務(wù)邏輯層
ASP.NET 2.0數(shù)據(jù)教程之三:母板頁(yè)和站點(diǎn)導(dǎo)航
ASP.NET 2.0數(shù)據(jù)教程之四:使用ObjectDataSource展現(xiàn)數(shù)據(jù)
ASP.NET 2.0數(shù)據(jù)教程之五:聲明參數(shù)
ASP.NET 2.0數(shù)據(jù)教程之六:編程設(shè)置ObjectDataSource的參數(shù)值
ASP.NET 2.0數(shù)據(jù)教程之七:使用DropDownList過(guò)濾的主/從報(bào)表
ASP.NET 2.0數(shù)據(jù)教程之八:使用兩個(gè)DropDownList過(guò)濾的主/從報(bào)表
ASP.NET 2.0數(shù)據(jù)教程之九:跨頁(yè)面的主/從報(bào)表
ASP.NET 2.0數(shù)據(jù)教程之十:使用 GridView 和DetailView實(shí)現(xiàn)的主/從報(bào)表
ASP.NET 2.0數(shù)據(jù)教程之十一:基于數(shù)據(jù)的自定義格式化
ASP.NET 2.0數(shù)據(jù)教程之十二:在GridView控件中使用TemplateField
當(dāng)Default.ASPx頁(yè)面被瀏覽器訪問(wèn)時(shí),ASP.NET引擎會(huì)合并母板頁(yè)的內(nèi)容和ASPx頁(yè)的內(nèi)容,并且將合并的內(nèi)容呈現(xiàn)為最終的HTML發(fā)送到瀏覽器。當(dāng)母板頁(yè)的內(nèi)容被更新,所有使用了這個(gè)母板頁(yè)的ASPx頁(yè)面會(huì)在下次被請(qǐng)求時(shí)重新和新的母板頁(yè)內(nèi)容合并。簡(jiǎn)單的說(shuō),母板頁(yè)模型允許定義一個(gè)統(tǒng)一的布局模板(母板頁(yè)),當(dāng)它改變時(shí)整個(gè)站點(diǎn)會(huì)反應(yīng)這種改變。
添加更多的頁(yè)面到站點(diǎn)中
讓我們花一點(diǎn)時(shí)間添加另外的頁(yè)面到站點(diǎn)中,以便支持最終的各種各樣的課程的示例。這里總共會(huì)有超過(guò)35個(gè)示例,所以我們先創(chuàng)建一部分。以后會(huì)有很多類別的示例,為了更好的管理這些示例我們給每個(gè)分類添加一個(gè)文件夾。現(xiàn)在我們添加三個(gè)文件夾:
• BasicReporting
• Filtering
• CustomFormatting
最后,如圖8所示向解決方案管理器中添加新文件。每添加一個(gè)文件的時(shí)候記住要勾上“選擇母板頁(yè)”的復(fù)選框。
圖8:添加下列文件
第三步:添加站點(diǎn)地圖
管理一個(gè)由大量網(wǎng)頁(yè)組成的網(wǎng)站的其中一個(gè)挑戰(zhàn)是要為訪問(wèn)者瀏覽網(wǎng)站提供一個(gè)捷徑。作為開(kāi)始,站點(diǎn)的導(dǎo)航結(jié)構(gòu)必須被定義。下一步,這個(gè)結(jié)構(gòu)必須轉(zhuǎn)換成適于導(dǎo)航的用戶界面元素,比如菜單或者位置導(dǎo)航。當(dāng)有新頁(yè)面添加到站點(diǎn)和已有的頁(yè)面被移除的時(shí)候這個(gè)過(guò)程將要修改和校正。
系列文章導(dǎo)航:
ASP.NET 2.0數(shù)據(jù)教程之一:創(chuàng)建一個(gè)數(shù)據(jù)訪問(wèn)層
ASP.NET 2.0數(shù)據(jù)教程之二:創(chuàng)建一個(gè)業(yè)務(wù)邏輯層
ASP.NET 2.0數(shù)據(jù)教程之三:母板頁(yè)和站點(diǎn)導(dǎo)航
ASP.NET 2.0數(shù)據(jù)教程之四:使用ObjectDataSource展現(xiàn)數(shù)據(jù)
ASP.NET 2.0數(shù)據(jù)教程之五:聲明參數(shù)
ASP.NET 2.0數(shù)據(jù)教程之六:編程設(shè)置ObjectDataSource的參數(shù)值
ASP.NET 2.0數(shù)據(jù)教程之七:使用DropDownList過(guò)濾的主/從報(bào)表
ASP.NET 2.0數(shù)據(jù)教程之八:使用兩個(gè)DropDownList過(guò)濾的主/從報(bào)表
ASP.NET 2.0數(shù)據(jù)教程之九:跨頁(yè)面的主/從報(bào)表
ASP.NET 2.0數(shù)據(jù)教程之十:使用 GridView 和DetailView實(shí)現(xiàn)的主/從報(bào)表
ASP.NET 2.0數(shù)據(jù)教程之十一:基于數(shù)據(jù)的自定義格式化
ASP.NET 2.0數(shù)據(jù)教程之十二:在GridView控件中使用TemplateField
在ASP.NET 2.0以前,開(kāi)發(fā)者需要自己創(chuàng)建站點(diǎn)導(dǎo)航結(jié)構(gòu),維護(hù)它并且將它轉(zhuǎn)化為適于導(dǎo)航的用戶界面元素。在ASP.NET 2.0里,開(kāi)發(fā)者可以利用非常靈活的且內(nèi)置的站點(diǎn)導(dǎo)航系統(tǒng)。ASP.NET 2.0站點(diǎn)導(dǎo)航系統(tǒng)允許開(kāi)發(fā)者定義一個(gè)站點(diǎn)地圖并且提供了可以訪問(wèn)這些信息的API。
默認(rèn)的ASP.NET站點(diǎn)地圖提供者期望站點(diǎn)地圖信息存儲(chǔ)在xml格式的文件中。但是,建立在提供者模型上的站點(diǎn)導(dǎo)航系統(tǒng)是可以被擴(kuò)展的以支持多種方式儲(chǔ)存的站點(diǎn)地圖。Jeff Prosise的文章,The SQL Site Map Provider You’ve Been Waiting For展示了怎樣創(chuàng)建將站點(diǎn)地圖存儲(chǔ)在SQL Server數(shù)據(jù)庫(kù)里的提供者;另外一個(gè)選擇是基于文件系統(tǒng)的站點(diǎn)地圖提供者。
在這個(gè)指南中,我們?nèi)匀皇褂?a href=/itjie/ASPjishu/ target=_blank class=infotextkey>ASP.NET2.0里默認(rèn)的站點(diǎn)地圖提供者。要?jiǎng)?chuàng)建站點(diǎn)地圖,在解決方案管理器里右鍵點(diǎn)擊項(xiàng)目名稱,選擇添加新項(xiàng),然后選擇站點(diǎn)地圖類型。命名為Web.sitemap然后單擊添加按鈕。
圖9:向你的項(xiàng)目中添加站點(diǎn)地圖
站點(diǎn)地圖文件是一個(gè)xml文件。注意:Visual Studio可以為站點(diǎn)地圖結(jié)構(gòu)提供智能感知。站點(diǎn)地圖文件必須含有<siteMap>作為根節(jié)點(diǎn),它必須至少含有一個(gè)<siteMapNode>子節(jié)點(diǎn)。這個(gè)<siteMapNode>元素又可以包含任意數(shù)量的<siteMapNode>子元素。
系列文章導(dǎo)航:
ASP.NET 2.0數(shù)據(jù)教程之一:創(chuàng)建一個(gè)數(shù)據(jù)訪問(wèn)層
ASP.NET 2.0數(shù)據(jù)教程之二:創(chuàng)建一個(gè)業(yè)務(wù)邏輯層
ASP.NET 2.0數(shù)據(jù)教程之三:母板頁(yè)和站點(diǎn)導(dǎo)航
ASP.NET 2.0數(shù)據(jù)教程之四:使用ObjectDataSource展現(xiàn)數(shù)據(jù)
ASP.NET 2.0數(shù)據(jù)教程之五:聲明參數(shù)
ASP.NET 2.0數(shù)據(jù)教程之六:編程設(shè)置ObjectDataSource的參數(shù)值
ASP.NET 2.0數(shù)據(jù)教程之七:使用DropDownList過(guò)濾的主/從報(bào)表
ASP.NET 2.0數(shù)據(jù)教程之八:使用兩個(gè)DropDownList過(guò)濾的主/從報(bào)表
ASP.NET 2.0數(shù)據(jù)教程之九:跨頁(yè)面的主/從報(bào)表
ASP.NET 2.0數(shù)據(jù)教程之十:使用 GridView 和DetailView實(shí)現(xiàn)的主/從報(bào)表
ASP.NET 2.0數(shù)據(jù)教程之十一:基于數(shù)據(jù)的自定義格式化
ASP.NET 2.0數(shù)據(jù)教程之十二:在GridView控件中使用TemplateField
站點(diǎn)地圖模擬了文件系統(tǒng)。為每個(gè)文件夾添加一個(gè)<siteMapNode>元素,并且為每個(gè)ASPx頁(yè)面添加一個(gè)<siteMapNode>子元素,如此:
Web.sitemap:
1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

系列文章導(dǎo)航:
ASP.NET 2.0數(shù)據(jù)教程之一:創(chuàng)建一個(gè)數(shù)據(jù)訪問(wèn)層
ASP.NET 2.0數(shù)據(jù)教程之二:創(chuàng)建一個(gè)業(yè)務(wù)邏輯層
ASP.NET 2.0數(shù)據(jù)教程之三:母板頁(yè)和站點(diǎn)導(dǎo)航
ASP.NET 2.0數(shù)據(jù)教程之四:使用ObjectDataSource展現(xiàn)數(shù)據(jù)
ASP.NET 2.0數(shù)據(jù)教程之五:聲明參數(shù)
ASP.NET 2.0數(shù)據(jù)教程之六:編程設(shè)置ObjectDataSource的參數(shù)值
ASP.NET 2.0數(shù)據(jù)教程之七:使用DropDownList過(guò)濾的主/從報(bào)表
ASP.NET 2.0數(shù)據(jù)教程之八:使用兩個(gè)DropDownList過(guò)濾的主/從報(bào)表
ASP.NET 2.0數(shù)據(jù)教程之九:跨頁(yè)面的主/從報(bào)表
ASP.NET 2.0數(shù)據(jù)教程之十:使用 GridView 和DetailView實(shí)現(xiàn)的主/從報(bào)表
ASP.NET 2.0數(shù)據(jù)教程之十一:基于數(shù)據(jù)的自定義格式化
ASP.NET 2.0數(shù)據(jù)教程之十二:在GridView控件中使用TemplateField
步驟4:利用站點(diǎn)地圖顯示菜單
在ASP.NET 2.0中我們可以像ASP.NET 1.x一樣,有多種編程方式可以訪問(wèn)數(shù)據(jù),還可以通過(guò)新的數(shù)據(jù)源控件訪問(wèn)。
這里有多個(gè)內(nèi)置的數(shù)據(jù)源控件,比如用來(lái)訪問(wèn)關(guān)系數(shù)據(jù)庫(kù)數(shù)據(jù)的SqlDataSource控件,用來(lái)訪問(wèn)類所提供的數(shù)據(jù)的ObjectDataSoruce控件等等。你還可以創(chuàng)建你自己的自定義數(shù)據(jù)源控件。
數(shù)據(jù)源控件作為你的ASPx頁(yè)面和底層數(shù)據(jù)的代理。為了顯示數(shù)據(jù)源控件查詢到的數(shù)據(jù),我們要添加其他Web控件到頁(yè)面上,并且將它和數(shù)據(jù)源控件綁定。要綁定一個(gè)Web控件到一個(gè)數(shù)據(jù)源控件,只需要簡(jiǎn)單的設(shè)置這個(gè)Web控件的DataSourceID屬性值為數(shù)據(jù)源控件的ID屬性值。
為了獲取站點(diǎn)地圖中的數(shù)據(jù),ASP.NET提供了SiteMapDataSource控件,它允許我們綁定一個(gè)Web控件來(lái)顯示我們的站點(diǎn)地圖。TreeView和Menu這兩個(gè)Web控件常常用來(lái)提供導(dǎo)航用戶界面。要綁定站點(diǎn)地圖中的數(shù)據(jù)到這兩個(gè)控件,添加一個(gè)SiteMapDataSource控件到頁(yè)面中,設(shè)置TreeView或者M(jìn)enu控件的DataSourceID屬性值為SiteMapDataSource控件的ID屬性值就可以了。舉個(gè)例子,我們可以用下面這些標(biāo)記將Menu控件到母板頁(yè)中:
1

2

3

4

5

6

7

系列文章導(dǎo)航:
ASP.NET 2.0數(shù)據(jù)教程之一:創(chuàng)建一個(gè)數(shù)據(jù)訪問(wèn)層
ASP.NET 2.0數(shù)據(jù)教程之二:創(chuàng)建一個(gè)業(yè)務(wù)邏輯層
ASP.NET 2.0數(shù)據(jù)教程之三:母板頁(yè)和站點(diǎn)導(dǎo)航
ASP.NET 2.0數(shù)據(jù)教程之四:使用ObjectDataSource展現(xiàn)數(shù)據(jù)
ASP.NET 2.0數(shù)據(jù)教程之五:聲明參數(shù)
ASP.NET 2.0數(shù)據(jù)教程之六:編程設(shè)置ObjectDataSource的參數(shù)值
ASP.NET 2.0數(shù)據(jù)教程之七:使用DropDownList過(guò)濾的主/從報(bào)表
ASP.NET 2.0數(shù)據(jù)教程之八:使用兩個(gè)DropDownList過(guò)濾的主/從報(bào)表
ASP.NET 2.0數(shù)據(jù)教程之九:跨頁(yè)面的主/從報(bào)表
ASP.NET 2.0數(shù)據(jù)教程之十:使用 GridView 和DetailView實(shí)現(xiàn)的主/從報(bào)表
ASP.NET 2.0數(shù)據(jù)教程之十一:基于數(shù)據(jù)的自定義格式化
ASP.NET 2.0數(shù)據(jù)教程之十二:在GridView控件中使用TemplateField
為了顯示Basic Reporting,Filtering Reports和Customized Formatting的子SiteMapNode,我們可以向先前的Repeater的ItemTemplate里添加另外一個(gè)Repeater。第二個(gè)Repeater將綁定到SiteMapNode實(shí)例的子結(jié)點(diǎn)屬性,如下:
1
2

3

4

5

6



7

8

9

10

11

12

13

14

15

16

17

18

19



20

21

22

23

24

25

26

27

28

29

系列文章導(dǎo)航:
ASP.NET 2.0數(shù)據(jù)教程之一:創(chuàng)建一個(gè)數(shù)據(jù)訪問(wèn)層
ASP.NET 2.0數(shù)據(jù)教程之二:創(chuàng)建一個(gè)業(yè)務(wù)邏輯層
ASP.NET 2.0數(shù)據(jù)教程之三:母板頁(yè)和站點(diǎn)導(dǎo)航
ASP.NET 2.0數(shù)據(jù)教程之四:使用ObjectDataSource展現(xiàn)數(shù)據(jù)
ASP.NET 2.0數(shù)據(jù)教程之五:聲明參數(shù)
ASP.NET 2.0數(shù)據(jù)教程之六:編程設(shè)置ObjectDataSource的參數(shù)值
ASP.NET 2.0數(shù)據(jù)教程之七:使用DropDownList過(guò)濾的主/從報(bào)表
ASP.NET 2.0數(shù)據(jù)教程之八:使用兩個(gè)DropDownList過(guò)濾的主/從報(bào)表
ASP.NET 2.0數(shù)據(jù)教程之九:跨頁(yè)面的主/從報(bào)表
ASP.NET 2.0數(shù)據(jù)教程之十:使用 GridView 和DetailView實(shí)現(xiàn)的主/從報(bào)表
ASP.NET 2.0數(shù)據(jù)教程之十一:基于數(shù)據(jù)的自定義格式化
ASP.NET 2.0數(shù)據(jù)教程之十二:在GridView控件中使用TemplateField
使用的CSS風(fēng)格選擇自Rachel Andrew的書(shū):The CSS Anthology: 101 Essential Tips, Tricks, & Hacks,<ul>和<li>元素的風(fēng)格將顯示如下:
圖11:用兩個(gè)Repeater和一些CSS顯示的菜單
這個(gè)菜單在母板頁(yè)中定義的,綁定了在Web.sitemap中定義的站點(diǎn)地圖,這意味著所有站點(diǎn)地圖的修改會(huì)立即反應(yīng)到所有使用了Site.master母板頁(yè)的頁(yè)面。
系列文章導(dǎo)航:
ASP.NET 2.0數(shù)據(jù)教程之一:創(chuàng)建一個(gè)數(shù)據(jù)訪問(wèn)層
ASP.NET 2.0數(shù)據(jù)教程之二:創(chuàng)建一個(gè)業(yè)務(wù)邏輯層
ASP.NET 2.0數(shù)據(jù)教程之三:母板頁(yè)和站點(diǎn)導(dǎo)航
ASP.NET 2.0數(shù)據(jù)教程之四:使用ObjectDataSource展現(xiàn)數(shù)據(jù)
ASP.NET 2.0數(shù)據(jù)教程之五:聲明參數(shù)
ASP.NET 2.0數(shù)據(jù)教程之六:編程設(shè)置ObjectDataSource的參數(shù)值
ASP.NET 2.0數(shù)據(jù)教程之七:使用DropDownList過(guò)濾的主/從報(bào)表
ASP.NET 2.0數(shù)據(jù)教程之八:使用兩個(gè)DropDownList過(guò)濾的主/從報(bào)表
ASP.NET 2.0數(shù)據(jù)教程之九:跨頁(yè)面的主/從報(bào)表
ASP.NET 2.0數(shù)據(jù)教程之十:使用 GridView 和DetailView實(shí)現(xiàn)的主/從報(bào)表
ASP.NET 2.0數(shù)據(jù)教程之十一:基于數(shù)據(jù)的自定義格式化
ASP.NET 2.0數(shù)據(jù)教程之十二:在GridView控件中使用TemplateField
關(guān)掉視圖狀態(tài)
所有的ASP.NET控件可以隨意的保持它們的狀態(tài)到View State(譯注:當(dāng)原文中采用的是開(kāi)頭字母大寫(xiě)的ViewState將不翻譯)中,最終生成HTML時(shí)它被系列化并保存在一個(gè)隱藏的表單域中。控件用ViewState來(lái)記憶它們?cè)陧?yè)面返回時(shí)被程序改變的狀態(tài),比如Web控件綁定的數(shù)據(jù)。如果視圖狀態(tài)允許信息可以在頁(yè)面返回時(shí)保持,它會(huì)增大發(fā)送到客戶端HTML代碼的尺寸,如果在沒(méi)有確切的監(jiān)控下會(huì)使頁(yè)面膨脹得很厲害。數(shù)據(jù)顯示控件-尤其是GridView控件-會(huì)顯著地增加大量的額外的標(biāo)記到頁(yè)面中。當(dāng)然,這些增長(zhǎng)可能對(duì)寬帶用戶毫無(wú)影響,但是視圖狀態(tài)會(huì)給撥號(hào)上網(wǎng)的用戶增加幾秒鐘的延遲。
要觀察視圖狀態(tài)的影響,在瀏覽器里打開(kāi)這個(gè)頁(yè)面然后查看頁(yè)面的源代碼(對(duì)于InterNET Explorer,點(diǎn)擊”查看”菜單并且選擇源代碼選項(xiàng))。你還可以打開(kāi)頁(yè)面跟蹤選項(xiàng)以觀察這個(gè)頁(yè)面上每個(gè)控件的視圖狀態(tài)。視圖狀態(tài)的信息被系列化并放在位于跟隨在<form>標(biāo)簽后面的<div>元素里的名為_(kāi)VIEWSTATE的隱藏表單域中。
視圖狀態(tài)只在頁(yè)面上使用了Form時(shí)才會(huì)被保持;如果你的ASPx頁(yè)面沒(méi)有包含
<form runat=”server”>的聲明,那么最后產(chǎn)生的HTML標(biāo)記中將不含有VIEWSTATE隱藏表單域。
母板頁(yè)產(chǎn)生的VIEWSTATE隱藏表單域大概有1800個(gè)字節(jié)。這些額外的數(shù)據(jù)主要是SiteMapDataSource控件為Repeater控件提供的數(shù)據(jù)內(nèi)容產(chǎn)生的。也許1800字節(jié)左右看起來(lái)還不算很多,但是使用了GridView并且使用了很多字段和記錄的視圖狀態(tài)很容易就膨脹10倍或更多。
可以將EnableViewState屬性設(shè)為false在頁(yè)面級(jí)或者控件級(jí)關(guān)閉視圖狀態(tài),從而可以減少產(chǎn)生的標(biāo)記的大小。Web控件利用視圖狀態(tài)在頁(yè)面返回時(shí)保持要綁定到數(shù)據(jù)顯示控件的數(shù)據(jù),當(dāng)關(guān)閉了數(shù)據(jù)顯示控件的視圖狀態(tài)后,在每次頁(yè)面返回時(shí)都必須重新綁定數(shù)據(jù)到控件。在ASP.NET 1.x的時(shí)候這個(gè)職責(zé)落到開(kāi)發(fā)者身上;在ASP.NET 2.0里,頁(yè)面返回時(shí),數(shù)據(jù)顯示控件會(huì)在必要的時(shí)候重新綁定數(shù)據(jù)。
設(shè)置Repeater控件的EnableViewState為false可以減少頁(yè)面的視圖狀態(tài)。可以通過(guò)屬性窗口設(shè)置或者在代碼視圖里手動(dòng)修改。通過(guò)這些改變,Repeater標(biāo)記將會(huì)像這樣:
1

EnableViewState="False">
2

3

4

5

系列文章導(dǎo)航:
ASP.NET 2.0數(shù)據(jù)教程之一:創(chuàng)建一個(gè)數(shù)據(jù)訪問(wèn)層
ASP.NET 2.0數(shù)據(jù)教程之二:創(chuàng)建一個(gè)業(yè)務(wù)邏輯層
ASP.NET 2.0數(shù)據(jù)教程之三:母板頁(yè)和站點(diǎn)導(dǎo)航
ASP.NET 2.0數(shù)據(jù)教程之四:使用ObjectDataSource展現(xiàn)數(shù)據(jù)
ASP.NET 2.0數(shù)據(jù)教程之五:聲明參數(shù)
ASP.NET 2.0數(shù)據(jù)教程之六:編程設(shè)置ObjectDataSource的參數(shù)值
ASP.NET 2.0數(shù)據(jù)教程之七:使用DropDownList過(guò)濾的主/從報(bào)表
ASP.NET 2.0數(shù)據(jù)教程之八:使用兩個(gè)DropDownList過(guò)濾的主/從報(bào)表
ASP.NET 2.0數(shù)據(jù)教程之九:跨頁(yè)面的主/從報(bào)表
ASP.NET 2.0數(shù)據(jù)教程之十:使用 GridView 和DetailView實(shí)現(xiàn)的主/從報(bào)表
ASP.NET 2.0數(shù)據(jù)教程之十一:基于數(shù)據(jù)的自定義格式化
ASP.NET 2.0數(shù)據(jù)教程之十二:在GridView控件中使用TemplateField
步驟5:添加breadcrumb導(dǎo)航
為完成母板頁(yè),讓我們給每個(gè)頁(yè)面添加一個(gè)breadcrumb導(dǎo)航UI元素。breadcrum導(dǎo)航會(huì)快速的顯示用戶當(dāng)前在站點(diǎn)中的位置。添加一個(gè)breadcrumb導(dǎo)航在ASP.NET 2.0中是簡(jiǎn)單的-只要添加一個(gè)SiteMapPath控件到頁(yè)面上就可以了;不需要更多的代碼。
在我們的站點(diǎn)中,添加這個(gè)控件到頭部的<div>標(biāo)簽中:
1

2

3

4

系列文章導(dǎo)航:
ASP.NET 2.0數(shù)據(jù)教程之一:創(chuàng)建一個(gè)數(shù)據(jù)訪問(wèn)層
ASP.NET 2.0數(shù)據(jù)教程之二:創(chuàng)建一個(gè)業(yè)務(wù)邏輯層
ASP.NET 2.0數(shù)據(jù)教程之三:母板頁(yè)和站點(diǎn)導(dǎo)航
ASP.NET 2.0數(shù)據(jù)教程之四:使用ObjectDataSource展現(xiàn)數(shù)據(jù)
ASP.NET 2.0數(shù)據(jù)教程之五:聲明參數(shù)
ASP.NET 2.0數(shù)據(jù)教程之六:編程設(shè)置ObjectDataSource的參數(shù)值
ASP.NET 2.0數(shù)據(jù)教程之七:使用DropDownList過(guò)濾的主/從報(bào)表
ASP.NET 2.0數(shù)據(jù)教程之八:使用兩個(gè)DropDownList過(guò)濾的主/從報(bào)表
ASP.NET 2.0數(shù)據(jù)教程之九:跨頁(yè)面的主/從報(bào)表
ASP.NET 2.0數(shù)據(jù)教程之十:使用 GridView 和DetailView實(shí)現(xiàn)的主/從報(bào)表
ASP.NET 2.0數(shù)據(jù)教程之十一:基于數(shù)據(jù)的自定義格式化
ASP.NET 2.0數(shù)據(jù)教程之十二:在GridView控件中使用TemplateField
在前面的Repeater例子中我將SiteMap的數(shù)據(jù)綁定到Repeater上;當(dāng)然,這個(gè)SectionLevelTutorialListing用戶控件也將使用這種方法。在Page_Load事件里,有一個(gè)檢測(cè)程序以確保這是否是第一次訪問(wèn)該頁(yè)面(不是返回)并且這個(gè)頁(yè)面的URL要映射到站點(diǎn)地圖中的一個(gè)節(jié)點(diǎn)。如果頁(yè)面使用了這個(gè)用戶控件,那么就沒(méi)有對(duì)應(yīng)的
<siteMapNode>,SiteMap.CurrentNode會(huì)返回null并且將沒(méi)有數(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ì)視圖里打開(kāi)每個(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中定義。我們不需要寫(xiě)任何代碼就完成了站點(diǎn)頁(yè)面布局和導(dǎo)航機(jī)制,Visual Studio提供了所見(jiàn)即所得的設(shè)計(jì)時(shí)支持。
完成了數(shù)據(jù)訪問(wèn)層和業(yè)務(wù)邏輯層并且定義了一個(gè)統(tǒng)一的頁(yè)面布局和站點(diǎn)導(dǎo)航系統(tǒng),下一步我們將探索通用報(bào)表模式。在接下來(lái)的三個(gè)指南里我們將會(huì)看到基本報(bào)表任務(wù)-用GridView,DetailsView和FormView控件顯示從業(yè)務(wù)邏輯層獲取的數(shù)據(jù)。
祝編程快樂(lè)!
附加讀物
想了解本教程中討論過(guò)的技術(shù)內(nèi)容相關(guān)的更多的信息,請(qǐng)參考下列資源:
• ASP.NET Master Pages Overview
• Master Pages in ASP.NET 2.0
• ASP.NET 2.0 Design Templates
• ASP.NET Site Navigation Overview
• Examining ASP.NET 2.0’s Site Navigation
• ASP.NET 2.0 Site Navigation Features
• Understanding ASP.NET View State
• How to: Enable Tracing for an ASP.NET Page
• ASP.NET User Controls
作者簡(jiǎn)介
Scott Mitchell,著有六本ASP/ASP.NET方面的書(shū),是4GuysFromRolla.com的創(chuàng)始人,自1998年以來(lái)一直應(yīng)用微軟Web技術(shù)。Scott是個(gè)獨(dú)立的技 術(shù)咨詢顧問(wèn),培訓(xùn)師,作家,最近完成了將由Sams出版社出版的新作,24小時(shí)內(nèi)精通ASP.NET 2.0。他的聯(lián)系電郵為mitchell@4guysfromrolla.com,也可以通過(guò)他的博客http://ScottOnWriting.NET與他聯(lián)系。
NET技術(shù):ASP.NET 2.0數(shù)據(jù)教程之三:母板頁(yè)和站點(diǎn)導(dǎo)航,轉(zhuǎn)載需保留來(lái)源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。