รูปที่ 1: โครงสร้างเว็บไซต์ |
รูปที่ 2: การเพิ่มแผนผังเว็บไซต์ใหม่ |
<?xml version="1.0" encoding="utf-8" ?> <แผนผังไซต์ xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" > <siteMapNode url="default.aspx" title="Home" description="เว็บไซต์ของฉัน"> <siteMapNode url="~/products/default.aspx" title="ผลิตภัณฑ์"> <siteMapNode url="~/products/product1.aspx" title="ผลิตภัณฑ์แรก" /> <siteMapNode url="~/products/product2.aspx" title="ผลิตภัณฑ์ที่สอง" /> <siteMapNode url="~/services/default.aspx" title="บริการ"> <siteMapNode url="~/services/service1.aspx" title="บริการครั้งแรก" /> <siteMapNode url="~/services/service2.aspx" title="บริการที่สอง" /> <siteMapNode url="contact.aspx" title="ติดต่อเรา" /> </แผนผังไซต์>< |
คำอธิบาย | คุณสมบัติ |
แสดง | ชื่อของเพจ คุณสมบัตินี้มักใช้โดยตัวควบคุมการนำทางเพื่อแสดงชื่อเรื่องของ URL |
url | แสดง URL ของหน้าที่อธิบายโดยโหนดนี้ |
คำอธิบาย | ระบุคำอธิบายเกี่ยวกับหน้านี้ คุณสามารถใช้คำอธิบายนี้เพื่อแสดงเนื้อหาพร้อมท์ |
บทบาท | โดยการใช้การตัดแต่งความปลอดภัย (จะกล่าวถึงในภายหลัง) แอ็ตทริบิวต์นี้จะระบุบทบาทที่ได้รับอนุญาตให้เข้าถึงเพจนี้ |
รูปที่ 3: การนำทาง Breadcrumb |
โฟลเดอร์ | ชื่อเว็บ | ฟอร์ม
Default.aspx | รูทเว็บไซต์ |
Contact.aspx | รูทเว็บไซต์ |
Default.aspx | ผลิตภัณฑ์ |
Product1.aspx | ผลิตภัณฑ์ |
Product2.aspx | ผลิตภัณฑ์ |
Default.aspx | บริการ |
Service1.aspx | บริการ |
Service2.aspx | บริการ |
<%@ ภาษาหลัก = "C #" AutoEventWireup = "true" CodeFile="MasterPage.master.cs" สืบทอด="MasterPage" %> <html xmlns="http://www.w3.org/1999/xhtml" > <หัว runat="เซิร์ฟเวอร์"> <หัวข้อ>หน้าที่ไม่มีชื่อ</หัวข้อ> </หัว>< <ร่างกาย> <form id="form1" runat="server"> <asp:Label ID="Label1" runat="server" Font-Size="XX-Large" ForeColor="Blue" Text="Welcome!"></asp:Label> <PathSeparatorStyle Font-Bold="True" ForeColor="#5D7B9D" /> <CurrentNodeStyle ForeColor="#333333" /> <NodeStyle Font-Bold="True" ForeColor="#7C6F57" /> <RootNodeStyle Font-Bold="True" ForeColor="#5D7B9D" /> </asp:contentplaceholder>< </div>< </แบบฟอร์ม> </ตัว> </html> |
รูปที่ 4: ตัวอย่างการทำงานของ Default.aspx |
คุณสมบัติข้อความ | ID ของไฮเปอร์ลิงก์ | คุณสมบัติ NavigateUrl |
ผลิตภัณฑ์ | HyperLink1 | ~/products/default.aspx |
บริการ | HyperLink | ~/Services/default.aspx |
HyperLink3 | ติดต่อเรา | ~/contact.aspxTable |
<%@ ภาษาเพจ = "C #" MasterPageFile = "~/MasterPage.master" AutoEventWireup = "true" CodeFile = "Default.aspx.cs" สืบทอด = "_Default" Title="หน้าที่ไม่มีชื่อ" %> <ศูนย์กลาง> <ตาราง> <ความกว้าง td="60%" > <ความกว้าง td="60%" > </asp:ไฮเปอร์ลิงก์> <ความกว้าง td="60%" > </asp:ไฮเปอร์ลิงก์> <ความกว้าง td="60%" > </asp:ไฮเปอร์ลิงก์> </โต๊ะ>< </ศูนย์> </asp:เนื้อหา> |
รูปที่ 5: หน้าเริ่มต้นของโฟลเดอร์ผลิตภัณฑ์ |
คุณสมบัติข้อความ | ID ของไฮเปอร์ลิงก์ | คุณสมบัติ NavigateUrl |
HyperLink1 | First Product | ~/products/product1.aspx |
HyperLink2 | Second Product | ~/products/product2.aspx |
รูปที่ 6 หน้าเริ่มต้นของโฟลเดอร์บริการ |
คุณสมบัติข้อความ | ID ของไฮเปอร์ลิงก์ | คุณสมบัติ NavigateUrl |
HyperLink1 | First Service | ~/Services/service1.aspx |
HyperLink2 | Second Service | ~/Services/service2.aspx |
คุณลักษณะข้อความของ | ชื่อฟอร์มเว็บ | ป้ายกำกับ
~/Contact.aspx | ติดต่อเรา |
~/Products/Product1.aspx | รายละเอียดสินค้าแรก |
~/Products/Product2.aspx | รายละเอียดสินค้าที่สอง |
~/Services/Service1.aspx | รายละเอียดบริการแรก |
~/Services/Service2. aspx | รายละเอียดบริการที่สอง |
รูปที่ 7: การเรียกใช้ตัวอย่างของ Product1.aspx |
สังเกตว่าชื่อและแอตทริบิวต์ URL ของไฟล์ web.sitemap ถูกนำมาใช้เพื่อสร้าง "breadcrumbs" นอกจากนี้ ให้สังเกตวิธีการแสดงพาเรนต์พร้อมกับชื่อเพจปัจจุบัน ลองนำทางไปยังหน้าต่างๆ และสังเกตการควบคุม SiteMapPath
4. ใช้การควบคุมแหล่งข้อมูล SiteMap
การใช้แผนผังเว็บไซต์ไม่ได้จำกัดอยู่เพียงการควบคุม SiteMapPath คุณยังสามารถแนบแผนผังเว็บไซต์กับตัวควบคุมการนำทางได้ (เช่น TreeView) ในตัวอย่างต่อไปนี้ คุณจะใช้ไฟล์แผนผังเว็บไซต์เดียวกันเพื่อใช้การเชื่อมโยงกับตัวควบคุม TreeView
เพิ่มเว็บฟอร์มใหม่ SiteMapDataSourceDemo.aspx ไปยังเว็บไซต์ จากนั้น ลากตัวควบคุมแหล่งข้อมูล SiteMap (SiteMapDataSource1) และตัวควบคุม TreeView (TreeView1) ลงบนแบบฟอร์ม ตั้งค่าคุณสมบัติ DataSourceID ของตัวควบคุม TreeView นี้เป็น SiteMapDataSource1 นอกจากนี้ ให้ตั้งค่าคุณสมบัติ ShowLines ของตัวควบคุม TreeView ให้เป็นจริง นี่คือมาร์กอัปที่สมบูรณ์จากหน้า SiteMapDataSourceDemo.aspx:
<%@ ภาษาเพจ = "C #" AutoEventWireup = "true" CodeFile = "SiteMapDataSourceDemo.aspx.cs" สืบทอด = "SiteMapDataSourceDemo" %> <html xmlns="http://www.w3.org/1999/xhtml" > <หัว runat="เซิร์ฟเวอร์"> <หัวข้อ>หน้าที่ไม่มีชื่อ</หัวข้อ> </หัว>< <ร่างกาย> <form id="form1" runat="server"> </asp:TreeView> <asp:SiteMapDataSource ID="SiteMapDataSource1" runat="เซิร์ฟเวอร์" /> </แบบฟอร์ม> </ตัว> </html> |
ตอนนี้ ให้รันเว็บฟอร์มเพื่อดูว่าโครงสร้างการนำทางเดียวกันนั้นถูกสร้างขึ้นโดยอัตโนมัติใน TreeView อย่างไร (ดูรูปที่ 8)
รูปที่ 8: การเชื่อมโยงไฟล์แผนผังเว็บไซต์เข้ากับตัวควบคุม TreeView |
คำอธิบาย | คุณสมบัติ |
ChildNodes | แสดงถึงคอลเลกชันของโหนดย่อยทั้งหมดของโหนดปัจจุบัน |
HasChildNodes | บ่งชี้ว่าโหนดแผนผังเว็บไซต์มีโหนดย่อย (จริง/เท็จ) |
ชื่อ | ส่งกลับค่าของแอตทริบิวต์ชื่อที่ระบุในไฟล์แผนผังเว็บไซต์ |
Url | ส่งกลับในไฟล์แผนผังเว็บไซต์ ค่าของแอตทริบิวต์ url ที่ระบุ |
คำอธิบาย | ส่งกลับค่าของแอตทริบิวต์คำอธิบายที่ระบุในไฟล์แผนผังเว็บไซต์ |
ParentNode | ระบุการอ้างอิงของโหนดแผนผังเว็บไซต์หลักของโหนดปัจจุบัน |
โมฆะที่ได้รับการป้องกัน Page_Load (ผู้ส่งวัตถุ EventArgs e) - int count = SiteMap.RootNode.ChildNodes.Count; สำหรับ (int i = 0; i < นับ; i++) - SiteMapNode smNode=SiteMap.RootNode.ChildNodes[i]; TreeNode tvNode = TreeNode ใหม่ (smNode.Title, "", "", smNode.Url, ""); TreeView1.Nodes.Add (tvNode); ถ้า (smNode.HasChildNodes) - int childCount=smNode.ChildNodes.Count; สำหรับ (int j = 0; j SiteMapNode smChildNode = smNode.ChildNodes[j]; TreeNode tvChildNode = TreeNode ใหม่ (smChildNode.Title, - smChildNode.Url, ""); tvNode.ChildNodes.Add (tvChildNode); - - - - |
ที่นี่ ขั้นแรกคุณจะได้รับจำนวนโหนดย่อยทั้งหมดในโหนดรูท จากนั้น คุณวนซ้ำคอลเลกชัน ChildNodes ของโหนดราก ในการวนซ้ำแต่ละครั้ง คุณจะสร้างอินสแตนซ์ใหม่ของคลาส TreeNode และระบุชื่อและ URL ในตัวสร้าง จากนั้น คุณเพิ่ม TreeNode นี้ลงในคอลเลกชัน Nodes ของ TreeView จากนั้น คุณตรวจสอบว่า SiteMapNode ปัจจุบันมีโหนดย่อยหรือไม่ หากมี คุณจะสำรวจมันและทำซ้ำขั้นตอนการสร้าง TreeNode โปรดทราบว่าในครั้งนี้คุณเพิ่ม TreeNodes ใหม่ให้กับคอลเลกชัน ChildNodes ของวัตถุ TreeNode ปัจจุบัน
โปรดทราบว่าคุณใช้ 2 ในลูปเนื่องจากคุณรู้ว่าการซ้อนมีเพียงสองระดับเท่านั้น เพื่อให้ตรรกะของคุณกว้างขึ้น คุณสามารถใช้การเรียกซ้ำเพื่อเติม TreeView
เรียกใช้เว็บฟอร์มแล้วคุณจะเห็นสิ่งที่คล้ายกับรูปที่ 8 อีกครั้ง
6.ใช้การดูแลรักษาความปลอดภัย
บ่อยครั้งที่เว็บไซต์ใช้โมเดลความปลอดภัยตามบทบาท ตัวอย่างเช่น คุณสามารถมีบทบาทที่แตกต่างกันในแอปพลิเคชันของคุณ เช่น ผู้ดูแลระบบ ผู้ทดสอบผลิตภัณฑ์ และผู้ทดสอบบริการ ในสถานการณ์เช่นนี้ คุณมักจะจำเป็นต้องควบคุมลิงก์การนำทางของไซต์ที่แสดงต่อผู้ใช้ ตัวอย่างเช่น หากผู้ใช้ที่เข้าสู่ระบบในปัจจุบันมีบทบาทผู้ทดสอบผลิตภัณฑ์ คุณอาจต้องการแสดงเฉพาะลิงก์ที่เกี่ยวข้องกับผลิตภัณฑ์และซ่อนลิงก์อื่น ๆ วิธีหนึ่งในการจัดการบทบาทคือการใช้การเขียนโค้ดด้วยมือ อย่างไรก็ตาม ต้องใช้ตรรกะการอนุญาตทั้งหมดโดยทางโปรแกรม โชคดีที่ไฟล์แผนผังเว็บไซต์และการควบคุมแหล่งข้อมูล SiteMap ร่วมกันมีคุณลักษณะที่เรียกว่าการตัดแต่งความปลอดภัยเพื่อช่วยเหลือคุณ
เพื่อทดสอบการยกเครื่องการรักษาความปลอดภัย คุณต้องเปิดใช้งานคุณสมบัติการเป็นสมาชิกและบทบาทของไซต์ของคุณ เปิดไฟล์ web.config และเพิ่มแท็กต่อไปนี้:
<โหมดการรับรองความถูกต้อง = "แบบฟอร์ม" /> <การอนุญาต> <ปฏิเสธผู้ใช้="?">ปฏิเสธ"> </การอนุญาต>< |
<roleManager เปิดใช้งาน = "true" /> |
รูปที่ 9: การเพิ่มบทบาทโดยใช้เครื่องมือการจัดการเว็บไซต์ |
รูปที่ 10: การสร้างผู้ใช้โดยใช้เครื่องมือการจัดการเว็บไซต์ |
<?xml version="1.0" encoding="utf-8" ?> <แผนผังไซต์ xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" > <siteMapNode url="default.aspx" title="Home" description="เว็บไซต์ของฉัน"> <siteMapNode title="ผลิตภัณฑ์" Roles="ProductTesters"> <siteMapNode url="~/products/product1.aspx" title="ผลิตภัณฑ์แรก" /> <siteMapNode url="~/products/product2.aspx" title="ผลิตภัณฑ์ที่สอง" /> <siteMapNode title="บริการ" บทบาท = "ผู้ทดสอบบริการ" > <siteMapNode url="~/services/service1.aspx" title="บริการครั้งแรก" /> <siteMapNode url="~/services/service2.aspx" title="บริการที่สอง" /> <siteMapNode url="contact.aspx" title="ติดต่อเรา" /> </แผนผังไซต์>< |
<ผู้ให้บริการ> <เพิ่มชื่อ = "ผู้ให้บริการของฉัน" type="System.Web.XmlSiteMapProvider " siteMapFile = "SecurityTrimming.sitemap" ความปลอดภัย TrimmingEnabled = "true" /> ผู้ให้บริการ> |
รูปที่ 11: หน้าเข้าสู่ระบบ |
รูปภาพ 12: ใช้การตกแต่งใหม่เพื่อความปลอดภัย |