top
Loading...
剖析ASP.NET2.0導航功能之控制地圖信息
四、 用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控件的各個部分。可以使用NodeStyle屬性來定制在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)把用戶引導到他們所請求的頁面上去。
作者:http://www.zhujiangroad.com
來源:http://www.zhujiangroad.com
北斗有巢氏 有巢氏北斗