![]() 圖1:網(wǎng)站結(jié)構(gòu) |
![]() 圖2:添加一個(gè)新的站點(diǎn)地圖 |
| <?xml version="1.0" encoding="utf-8" ?> <siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" > <siteMapNode url="default.aspx" title="Home" descr <siteMapNode url="~/products/default.aspx" title="Products"> <siteMapNode url="~/products/product1.aspx" title="First Product" /> <siteMapNode url="~/products/product2.aspx" title="Second Product" /> </siteMapNode> <siteMapNode url="~/services/default.aspx" title="Services"> <siteMapNode url="~/services/service1.aspx" title="First Service" /> <siteMapNode url="~/services/service2.aspx" title="Second Service" /> </siteMapNode> <siteMapNode url="contact.aspx" title="Contact Us" /> </siteMapNode> </siteMap> |
| 屬性 | 描述 |
| title | 顯示頁(yè)面的標(biāo)題。這個(gè)屬性經(jīng)常由導(dǎo)航控件用于顯示URL的標(biāo)題。 |
| url | 顯示這個(gè)結(jié)點(diǎn)描述的頁(yè)面的 URL。 |
| description | 指定關(guān)于這個(gè)頁(yè)面的描述。你可以使用這個(gè)描述來(lái)顯示提示內(nèi)容。 |
| roles | 通過(guò)使用安全整修(后面將討論),這個(gè)屬性指定允許存取這個(gè)頁(yè)面的角色。 |
![]() 圖3:Breadcrumb導(dǎo)航 |
| Web表單名 | 文件夾 |
| Default.aspx | Website root |
| Contact.aspx | Website root |
| Default.aspx | Products |
| Product1.aspx | Products |
| Product2.aspx | Products |
| Default.aspx | Services |
| Service1.aspx | Services |
| Service2.aspx | Services |
| <%@ Master Language="C#" AutoEventWireup="true" CodeFile="MasterPage.master.cs" Inherits="MasterPage" %> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>Untitled Page</title> </head> <body> <form id="form1" runat="server"> <div> <asp:Label ID="Label1" runat="server" Font-Size="XX-Large" ForeColor="Blue" Text="Welcome!"></asp:Label><br /> <asp:SiteMapPath ID="SiteMapPath1" runat="server" Font-Names="Verdana" Font-Size="0.8em" PathSeparator=" : "> <PathSeparatorStyle Font-Bold="True" ForeColor="#5D7B9D" /> <CurrentNodeStyle ForeColor="#333333" /> <NodeStyle Font-Bold="True" ForeColor="#7C6F57" /> <RootNodeStyle Font-Bold="True" ForeColor="#5D7B9D" /> </asp:SiteMapPath> <br /> <br /> <asp:contentplaceholder id="ContentPlaceHolder1" runat="server"> </asp:contentplaceholder> </div> </form> </body> </html> |
![]() 圖4:Default.aspx的示例運(yùn)行 |
| HyperLink ID | Text屬性 | NavigateUrl屬性 |
| HyperLink1 | Products | ~/products/default.aspx |
| HyperLink2 | Services | ~/Services/default.aspx |
| HyperLink3 | Contact Us | ~/contact.aspx |
| <%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" Title="Untitled Page" %> <asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server"> <center> <table> <tr> <td width="60%"> <asp:Label ID="Label1" runat="server" Font-Size="X-Large" Text="Welcome to our Web site!"></asp:Label></td> </tr> <tr> <td width="60%"> <asp:HyperLink ID="HyperLink1" runat="server" Font-Size="X-Large" NavigateUrl="~/Products/Default.aspx">Products </asp:HyperLink></td> </tr> <tr> <td width="60%"> <asp:HyperLink ID="HyperLink2" runat="server" Font-Size="X-Large" NavigateUrl="~/Services/Default.aspx">Services </asp:HyperLink></td> </tr> <tr> <td width="60%"> <asp:HyperLink ID="HyperLink3" runat="server" Font-Size="X-Large" NavigateUrl="~/Contact.aspx">Contact Us </asp:HyperLink></td> </tr> </table> </center> </asp:Content> |
![]() 圖5:Products文件夾的默認(rèn)頁(yè)面 |
| HyperLink ID | Text屬性 | NavigateUrl屬性 |
| HyperLink1 | First Product | ~/products/product1.aspx |
| HyperLink2 | Second Product | ~/products/product2.aspx |
![]() 圖6.Services文件夾的默認(rèn)頁(yè)面 |
| HyperLink ID | Text屬性 | NavigateUrl屬性 |
| HyperLink1 | First Service | ~/Services/service1.aspx |
| HyperLink2 | Second Service | ~/Services/service2.aspx |
| Web表單名 | Label的Text屬性 |
| ~/Contact.aspx | Contact Us |
| ~/Products/Product1.aspx | First Product Details |
| ~/Products/Product2.aspx | Second Product Details |
| ~/Services/Service1.aspx | First Service Details |
| ~/Services/Service2.aspx | Second Service Details |
![]() 圖7:Product1.aspx的示例運(yùn)行 |
注意,web.sitemap文件的title和URL屬性是怎樣用于生成“breadcrumbs”的。另外,還要注意,父級(jí)是怎樣隨著當(dāng)前頁(yè)面標(biāo)題一起顯示的。試一試導(dǎo)航到各種頁(yè)面并觀察SiteMapPath控件。
四、 使用SiteMap數(shù)據(jù)源控件
站點(diǎn)地圖的使用并不僅限于SiteMapPath控件。你還可以把站點(diǎn)地圖依附到可導(dǎo)航控件(例如TreeView)上。在下列例子中,你將使用相同的站點(diǎn)地圖文件來(lái)實(shí)現(xiàn)與一個(gè)TreeView控件的綁定。
把一個(gè)新的Web表單SiteMapDataSourceDemo.aspx添加到網(wǎng)站上。然后,把一個(gè)SiteMap數(shù)據(jù)源控件(SiteMapDataSource1)和一個(gè)TreeView控件(TreeView1)拖動(dòng)到表單上。把這個(gè)TreeView控件的DataSourceID屬性設(shè)置為SiteMapDataSource1。另外,還要把該TreeView控件的ShowLines屬性設(shè)置為true。下面是SiteMapDataSourceDemo.aspx頁(yè)面中的完整的標(biāo)記:
| <%@ Page Language="C#" AutoEventWireup="true" CodeFile="SiteMapDataSourceDemo.aspx.cs" Inherits="SiteMapDataSourceDemo" %> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>Untitled Page</title> </head> <body> <form id="form1" runat="server"> <asp:TreeView ID="TreeView1" runat="server" DataSourceID="SiteMapDataSource1" ShowLines="True"> </asp:TreeView> <asp:SiteMapDataSource ID="SiteMapDataSource1" runat="server" /> </form> </body> </html> |
現(xiàn)在,運(yùn)行這個(gè)Web表單以觀察相同的導(dǎo)航結(jié)構(gòu)是怎樣被自動(dòng)生成到TreeView中的(見(jiàn)圖8)。
![]() 圖8:把網(wǎng)站地圖文件綁定到一個(gè)TreeView控件 |
| 屬性 | 描述 |
| ChildNodes | 代表當(dāng)前結(jié)點(diǎn)的所有子結(jié)點(diǎn)的集合 |
| HasChildNodes | 指示是否站點(diǎn)地圖結(jié)點(diǎn)具有子結(jié)點(diǎn)(true/false) |
| Title | 返回在站點(diǎn)地圖文件中指定的title屬性的值 |
| Url | 返回在站點(diǎn)地圖文件中指定的url屬性的值 |
| Description | 返回在站點(diǎn)地圖文件中指定的description屬性的值 |
| ParentNode | 指出當(dāng)前結(jié)點(diǎn)的父站點(diǎn)地圖結(jié)點(diǎn)的參考 |
| protected void Page_Load(object sender, EventArgs e) { int count = SiteMap.RootNode.ChildNodes.Count; for (int i = 0; i < count; i++) { SiteMapNode smNode=SiteMap.RootNode.ChildNodes[i]; TreeNode tvNode = new TreeNode(smNode.Title, "", "", smNode.Url, ""); TreeView1.Nodes.Add(tvNode); if (smNode.HasChildNodes) { int childCount=smNode.ChildNodes.Count; for (int j = 0; j < childCount; j++) { SiteMapNode smChildNode = smNode.ChildNodes[j]; TreeNode tvChildNode = new TreeNode(smChildNode.Title, "", "", smChildNode.Url, ""); tvNode.ChildNodes.Add(tvChildNode); } } } } |
在這里,你首先得到根結(jié)點(diǎn)中的子結(jié)點(diǎn)的總數(shù)。然后,你循環(huán)遍歷根結(jié)點(diǎn)的ChildNodes集合。在每一次遍歷中,你都會(huì)創(chuàng)建一個(gè)新的TreeNode類(lèi)的實(shí)例并且在它的構(gòu)造器中指定它的標(biāo)題和url。然后,你把這個(gè)TreeNode添加到TreeView的Nodes集合中。然后,你檢查是否當(dāng)前SiteMapNode有任何子結(jié)點(diǎn)。如果有,你就對(duì)之進(jìn)行遍歷,重復(fù)TreeNode創(chuàng)建過(guò)程。注意,這一次你把新的TreeNodes添加到當(dāng)前TreeNode對(duì)象的ChildNodes集合中。
注意,因?yàn)槟阒乐淮嬖趦杉?jí)的嵌套,所以你在循環(huán)中使用了2。為了使得你的邏輯更具有一般性,你可以使用遞歸來(lái)填充TreeView。
運(yùn)行Web表單,那么你將再次看到類(lèi)似于圖8所示的內(nèi)容。
六、 使用安全整修
經(jīng)常情況下,網(wǎng)站都要實(shí)現(xiàn)基于角色的安全模式。例如,你可以在你的應(yīng)用程序中具有不同的角色,例如系統(tǒng)管理員,產(chǎn)品測(cè)試員和服務(wù)測(cè)試員。在這樣的情況中,你經(jīng)常需要控制顯示給用戶的站點(diǎn)導(dǎo)航鏈接。例如,如果當(dāng)前登錄的用戶屬于產(chǎn)品測(cè)試員角色,那么你可能僅想顯示與產(chǎn)品相聯(lián)系的鏈接,而隱藏任何其它鏈接。一種處理角色的方法是使用手工編碼,但是,它要求以編程方式實(shí)現(xiàn)所有的授權(quán)邏輯。幸好,站點(diǎn)地圖文件和SiteMap數(shù)據(jù)源控件一起提供了一種稱(chēng)為安全整修的特征來(lái)幫助你。
為了測(cè)試安全整修,你需要啟動(dòng)你的網(wǎng)站的會(huì)員和角色特征。打開(kāi)web.config文件并且在其中加入下列標(biāo)記:
| <authentication mode="Forms" /> <authorization> <deny users="?"></deny> </authorization> |
| <roleManager enabled="true" /> |
![]() 圖9:使用Web站點(diǎn)管理工具添加角色 |
![]() 圖10:使用Web站點(diǎn)管理工具創(chuàng)建用戶 |
| <?xml version="1.0" encoding="utf-8" ?> <siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" > <siteMapNode url="default.aspx" title="Home" description="My Web Site"> <siteMapNode title="Products" roles="ProductTesters"> <siteMapNode url="~/products/product1.aspx" title="First Product" /> <siteMapNode url="~/products/product2.aspx" title="Second Product" /> </siteMapNode> <siteMapNode title="Services" roles="ServiceTesters"> <siteMapNode url="~/services/service1.aspx" title="First Service" /> <siteMapNode url="~/services/service2.aspx" title="Second Service" /> </siteMapNode> <siteMapNode url="contact.aspx" title="Contact Us" /> </siteMapNode> </siteMap> |
| <siteMap defaultProvider="myprovider" enabled="true"> <providers> <add name="myprovider" type="System.Web.XmlSiteMapProvider " siteMapFile="SecurityTrimming.sitemap" securityTrimmingEnabled="true" /> </providers> |
![]() 圖11:登錄頁(yè)面 |
![]() 圖12:使用安全整修 |
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注