亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

剖析ASP.NET2.0導航功能之控制地圖信息

2019-11-18 19:04:57
字體:
來源:轉載
供稿:網友

  一、 簡介

  任何由多個頁面組成的網站都需要某種導航用戶接口,這是用兩步來創建的。首先,必須定義站點的邏輯結構;然后,添加用戶接口元素來允許用戶在站點結構的各個部分之間來回移動。在asp.net 2.0以前,要求開發者自己來解決這兩個問題。然而,到了版本2.0以后,ASP.NET提供了一個簡單的方法來定義一站點的結構并且包括大量的Web控件-專門設計來顯示站點導航用戶接口。

  在上一篇中我們分析了怎樣通過導航Web控件來創建Web.sitemap xml站點地圖文件以及怎樣顯示站點導航信息,這包括:

  ·SiteMapPath,它顯示一個breadcrumb(Home>Electronics>XBOX)

  ·TreeView,它顯示一個可折迭的垂直顯示的樹,用于顯示整個站點地圖層次

  ·Menu,它顯示一個水平或垂直對齊的菜單

  上一篇中只對站點地圖文件和導航Web控件的功能和能力提供了一個粗略介紹。在這一部分里,我們將把注意力轉到編程地控制站點地圖信息,并詳細地分析一下SiteMapPath導航Web控件。

  二、 站點地圖

  本文中的示例使用在第一部分中創建的站點地圖。你可以在第一部分看到該站點地圖XML文件的精確的句法或在本文最后下載下來。站點結構的圖形化表示使用于這些示例中,見下圖:

 
  三、 編程控制站點地圖
  一個站點地圖是一個相關聯的站點地圖結點的集合。典型地,每個站點地圖結點包含一標題,一個URL和一個描述。上面顯示的圖像是站點地圖的一個示例,其中每個矩形代表一個站點地圖結點。ASP.NET并不要求一特別的格式來指定站點地圖,盡管它的確提供了使用一XML格式文件的默認選擇。(關于XML文件的細節請參考第一篇)
  ASP.NET提供了一個類稱為SiteMap-它提供只讀的,編程地存取該站點地圖。這個類被兩個控件內部使用,在本文的后面我們將分析這兩個類:
  ·SiteMapPath-基于被訪問頁面和它的站點結構位置生成一個breadcrumb。具體地說,該SiteMapPath從由SiteMap.CurrentNode屬性返回的結點開始,往上遍歷這個層次結構直到根部。
  ·SiteMapDataSource-這個控件創建一個層次結構的數據源-它映射該站點地圖的結構。為了在另外的Web控件中顯示站點地圖信息,例如TreeView或Menu,該Web控件并不直接查詢站點地圖;而是,它們綁定到一個SiteMapDataSource控件-它負責讀取該站點地圖結構。
  SiteMap類有兩個屬性:RootNode和CurrentNode。這兩個屬性都返回SiteMapNode實例。SiteMapNode類代表一個定義在站點地圖中的結點并且具有描述該結點的屬性-Title,Url和Description,另外還有通過編程方式控制層次結構的屬性-ParentNode,ChildNodes,NextSibling,PReviousSibling,等等。
  你可以在你的自己ASP.NET頁中使用SiteMap類。例如,我們能在每個頁面中顯示Next,Previous和Up鏈接-這只需通過添加三個HyperLink控件到站點的主頁面,另加上一點點編程以檢查是否CurrentNode有一NextSibling,PreviousSibling或ParentNode。具體地說,你將添加下列標記到你的主頁面:
[<asp:HyperLink ID="lnkPrev" runat="server">Prev</asp:HyperLink>] |
[<asp:HyperLink ID="lnkUp" runat="server">Up</asp:HyperLink>] |
[<asp:HyperLink ID="lnkNext" runat="server">Next</asp:HyperLink>]
  主頁面的Page_Load事件處理器看上去如下:
If SiteMap.CurrentNode IsNot Nothing Then
 '設置next/previous/up鏈接
 If SiteMap.CurrentNode.PreviousSibling IsNot Nothing Then
  lnkPrev.NavigateUrl = SiteMap.CurrentNode.PreviousSibling.Url
  lnkPrev.Text = "< Prev (" & SiteMap.CurrentNode.PreviousSibling.Title & ")"
 Else
  lnkPrev.NavigateUrl = String.Empty
  lnkPrev.Text = "< Prev"
 End If
 If SiteMap.CurrentNode.ParentNode IsNot Nothing Then
  lnkUp.NavigateUrl = SiteMap.CurrentNode.ParentNode.Url
  lnkUp.Text = "Up (" & SiteMap.CurrentNode.ParentNode.Title & ")"
 Else
  lnkUp.NavigateUrl = String.Empty
  lnkUp.Text = "Up"
 End If
 If SiteMap.CurrentNode.NextSibling IsNot Nothing Then
  lnkNext.NavigateUrl = SiteMap.CurrentNode.NextSibling.Url
  lnkNext.Text = "(" & SiteMap.CurrentNode.NextSibling.Title & ") Next >"
 Else
  lnkNext.NavigateUrl = String.Empty
  lnkNext.Text = "Next >"
 End If
End If
  這將把三個超級鏈接Next,Up和Previous添加到從主頁面繼承的每一個頁面,參見下圖的快照。
  四、 用SiteMapPath控件顯示Breadcrumbs
  SiteMapPath控件顯示一個breadcrumb-它用于向用戶顯示他們在該站點結構中所處的位置。SiteMapPath控件的輸出由下列三個因素決定:
  ·站點的結構,由站點地圖定義,
  ·被訪問的頁面和
  ·SiteMapPath控件的屬性值
  當訪問一個有SiteMapPath控件的頁面時,該SiteMapPath控件試圖把頁面的URL映射到定義在該站點地圖中的一個站點地圖結點的url值。如果找到一個匹配,該控件將上行遍歷該結構到根部,并作下列輸出:RootNode>ParentNode>...>ParentNode>CurrentNode。這里的CurrentNode是站點地圖結點的標題-它用來映射當前頁面請求的URL;RootNode和ParentNodes被作為超級鏈接生成,如果該站點地圖結點有一個定義在該站點地圖中的URL值。在"History Books"頁面(Books/History.aspx)中的一個SiteMapPath控件將生成Home>Books>History,同時還分別生成超級鏈接形式的Home和Books,分別回指向Default.aspx和Books/Default.aspx。在訪問Books/Default.aspx時,SiteMapPath生成Home>Books。
  非常清楚,SiteMapPath的輸出既依賴于站點地圖本身又依賴于正在被訪問的頁面。該SiteMapPath的輸出可以被定制,通過該控件的屬性。有一些標準Web控件格式的屬性-BackColor,Font,ForeColor,等等-還有一些特定于SiteMapPath的設置,包括:
  u PathDirection-可以取兩個值之一它們是RootToCurrent(缺省的)或CurrentToRoot。當取值為RootToCurrent,在"History Books"頁面上的breadcrumb生成為Home>Books>History;當取值為CurrentToRoot,輸出將是History>Books>Home。
  ·PathSeparator-指定用于分開breadcrumb中的每個結點的字符串;缺省為>
  ·RenderCurrentNodeAsLink-一個Boolean屬性-它指定是否CurrentNode應該生成為一個鏈接;缺省為False。
  ·ParentLevelsDisplayed-一個整數值-它可以用于限制breadcrumb所顯示樹層結構的高度。缺省地,這個屬性值是-1,這意味著沒有限制;把它的值置為1,那么在"History Books"頁面將生成breadcrumb Books>History。根不包含在內,因為SiteMapPath控件只是向上遍歷到一個父級-從"History"到"Book"。
  ·ShowToolTips-如果一站點地圖結點有一個描述值,那么該描述對于每一個breadcrumb結點被顯示為一個提示文本,如果這個屬性被設置為True(默認情況)。
  還有風格屬性可用來設置BackColor,Font,ForeColor,等等-用于SiteMapPath控件的各個部分??梢允褂肗odeStyle屬性來定制在breadcrumb中的結點的外觀;可以使用RootNodeStyle和CurrentNodeStyle來進一步定制在breadcrumb中的第一個和最后一個結點。一般地,最簡單也是最具有審美特點的來格式化該SiteMapPath控件的方法是使用它的"Auto Format"向導-這可以通過該控件的靈敏標簽啟動。
  五、 用模板定制生成的輸出
  該SiteMapPath包含四個模板-它們允許進一步定制生成的輸出。模板允許混合使用靜態HTML標記,Web控件和數據綁定語法;如果你以前已使用了DataList或Repeater控件,那么你已對模板很熟悉了。在ASP.NET 2.0中的模板基本上同ASP.NET 1.x中的一樣,除了ASP.NET 2.0引入了一些新的更精練的語法來數據綁定表達式外。例如,在ASP.NET 1.x中,你必須使用語法<%# DataBinder.Eval(Container.DataItem, PropertyName) %>來取得一列的值。而在ASP.NET 2.0中,這種老式的語法仍可以使用,但是你可以選擇性地使用更短的版本<%# Eval(PropertyName) %>。
  默認地,SiteMapPath以常規超級鏈接方式生成根和父結點,這樣當用戶點擊該鏈接時,他們可以在該控件層次樹上快速地向上回退。然而,在把信息發送回用戶前,你可能想做一些服務器端處理-也許你想要記錄下用戶要到哪里去或自動地保存他們在該頁面所做的任何變化??梢酝ㄟ^使用一個模板和把該結點生成為一個LinkButton來實現這一功能。
  例如,如果你只想要把SiteMapPath的根結點生成為一個LinkButton,你可以用下面的標記來把一個<RootNodeTemplate>添加到SiteMapPath控件上:
<asp:SiteMapPath ID="SiteMapPath1" runat="server">
<RootNodeTemplate>
<asp:LinkButton ID="LinkButton1" runat="server"
Text='<%# Eval("title") %>'
CommandArgument='<%# Eval("url") %>'
OnCommand="LinkButton1_Command">
</asp:LinkButton>
</RootNodeTemplate>
</asp:SiteMapPath>
  這個標記添加一LinkButton控件到SiteMapPath-它的Text屬性被分配給相應SiteMapNode的Title屬性。當點擊該LinkButton時,將導致一個回寄并且該控件的Command事件激發-這將激活LinkButton1_Command事件處理器。SiteMapNode的Url屬性被通過CommandArgument屬性傳遞到這個事件處理器。在這個事件處理器中,你可以做任何服務器端所需要的處理,然后通過Response.Redirect(e.CommandArgument)把用戶引導到他們所請求的頁面上去。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
激情亚洲一区二区三区四区| 欧美成人午夜剧场免费观看| 青草青草久热精品视频在线网站| 国产精品1区2区在线观看| 97视频网站入口| 日韩一中文字幕| 亚洲欧洲第一视频| 亚洲九九九在线观看| 亚洲国产中文字幕在线观看| 国产精欧美一区二区三区| 亚洲欧美精品中文字幕在线| 最近2019中文字幕大全第二页| 日本一区二区在线播放| 91精品视频播放| 欧美性猛交xxxx乱大交| 一区三区二区视频| 国内精品久久久久久影视8| 国产精品美乳一区二区免费| 国产精品视频一| 欧美激情综合亚洲一二区| 欧美性猛交xxxxx水多| 亚洲精品www| 精品亚洲一区二区| 亚洲一区亚洲二区亚洲三区| 激情亚洲一区二区三区四区| 97久久超碰福利国产精品…| 国产精品久久一区| 日韩免费av一区二区| 欧美成人在线影院| 日韩欧美aⅴ综合网站发布| 亚洲精品白浆高清久久久久久| 国产精品狼人色视频一区| 亚洲精品国产精品自产a区红杏吧| 国产精品久久久久aaaa九色| 亚洲人av在线影院| 欧美激情精品久久久久久大尺度| 91九色视频在线| 欧美成人免费va影院高清| 另类美女黄大片| 欧美又大粗又爽又黄大片视频| 国产日韩一区在线| 亚洲**2019国产| 欧美老女人性视频| 亚洲激情视频在线| 成人欧美一区二区三区在线| 亚洲一区二区少妇| 亚洲精品一区二区三区婷婷月| 日韩国产欧美区| 久久影视三级福利片| 亚洲激情视频在线| 久久久久久久香蕉网| 久久久噜噜噜久久| 高跟丝袜一区二区三区| 国产噜噜噜噜久久久久久久久| 亚洲永久在线观看| 日韩av手机在线看| 亚洲国产欧美精品| 亚洲国产精品一区二区久| 国产精品男人爽免费视频1| 久久久久久国产精品三级玉女聊斋| 国产精品久久久久久久久久三级| 国自产精品手机在线观看视频| 成人精品一区二区三区| 久久97精品久久久久久久不卡| 欧美精品videossex性护士| 国产成人在线播放| 成人网页在线免费观看| 91免费国产视频| 久久青草福利网站| 不卡中文字幕av| 中文字幕日本精品| 亚洲91av视频| 亚洲成人a**站| 91香蕉亚洲精品| 最近更新的2019中文字幕| 成人激情在线播放| 国产精品一二三在线| 精品呦交小u女在线| 日韩国产一区三区| 亚洲欧美成人网| 91亚洲精品久久久久久久久久久久| 精品亚洲aⅴ在线观看| 欧美精品福利视频| 久久免费视频观看| 日本精品久久久| 亚洲第一精品久久忘忧草社区| 欧美专区在线视频| 国产精品久久久久久一区二区| 亚洲美女动态图120秒| 欧美激情一区二区三区高清视频| 国产精品美女久久久免费| 98午夜经典影视| 国产欧美日韩精品丝袜高跟鞋| 亚洲国产精品电影在线观看| 欧美视频中文字幕在线| 中文字幕无线精品亚洲乱码一区| 中文字幕精品av| 97精品免费视频| 亚洲天堂男人的天堂| 成人看片人aa| 亚洲国语精品自产拍在线观看| 亚洲精品美女久久久| 91探花福利精品国产自产在线| 亚洲午夜性刺激影院| 久久久国产影院| 日本高清不卡在线| 国产在线视频不卡| 亚洲qvod图片区电影| 国产精品亚洲片夜色在线| 中文字幕精品一区二区精品| 国产男人精品视频| 国产午夜精品一区二区三区| 68精品国产免费久久久久久婷婷| 国产精品久久久久久久久久ktv| 91在线精品视频| 国产精品入口日韩视频大尺度| 国产做受69高潮| 91国产一区在线| 2018日韩中文字幕| 亚洲精品一区二区三区不| 欧美大尺度电影在线观看| 亚洲欧洲日产国产网站| 成人中文字幕+乱码+中文字幕| 在线观看中文字幕亚洲| 国产精品久久久久久久久借妻| 亚洲男人第一av网站| 中文字幕亚洲图片| 欧美一级bbbbb性bbbb喷潮片| 色综合91久久精品中文字幕| 久久这里只有精品99| 国内精品久久久久伊人av| 日韩欧美成人精品| 国产欧美在线播放| 97在线视频免费播放| 欧美亚洲国产日韩2020| 国产亚洲成精品久久| 伊人一区二区三区久久精品| 国产女人精品视频| 中文字幕国内精品| 在线性视频日韩欧美| 亚洲自拍偷拍福利| yw.139尤物在线精品视频| 欧美黑人xxxx| 亚洲福利视频网| 国产成人鲁鲁免费视频a| 91精品国产91久久久久久| 久久久人成影片一区二区三区观看| 中文字幕日韩av| 91高清在线免费观看| 欧美巨猛xxxx猛交黑人97人| 亚洲社区在线观看| 国产精品极品美女粉嫩高清在线| 亚洲第一在线视频| 在线观看欧美成人| 欧美亚洲国产视频小说| 日韩中文在线中文网三级| 中文字幕精品国产| 国产一区二区日韩精品欧美精品| 精品视频9999| 欧美在线xxx| 2021久久精品国产99国产精品| 日韩一区二区三区在线播放| 91爱视频在线| 青青草一区二区|