الشكل 1: هيكل الموقع |
الشكل 2: إضافة خريطة موقع جديدة |
<?xml version="1.0" encoding="utf-8" ?> <siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" > <siteMapNode url="default.aspx" title="الصفحة الرئيسية" description="موقع الويب الخاص بي"> <siteMapNode url="~/products/default.aspx" title="المنتجات"> <siteMapNode url="~/products/product1.aspx" title="المنتج الأول" /> <siteMapNode url="~/products/product2.aspx" title="المنتج الثاني" /> </siteMapNode> <siteMapNode url="~/services/default.aspx" title="الخدمات"> <siteMapNode url="~/services/service1.aspx" title="الخدمة الأولى" /> <siteMapNode url="~/services/service2.aspx" title="الخدمة الثانية" /> </siteMapNode> <siteMapNode url="contact.aspx" title="اتصل بنا" /> </siteMapNode> </خريطة الموقع> |
وصف | الخاصية |
عنوان | الصفحة. يتم استخدام هذه الخاصية غالبًا بواسطة عناصر التحكم في التنقل لعرض عنوان URL. |
url | عنوان URL للصفحة التي تصفها هذه العقدة. |
الوصف | يحدد وصفًا حول هذه الصفحة. يمكنك استخدام هذا الوصف لعرض المحتوى الفوري. |
الأدوار | باستخدام تقليم الأمان (سنناقشه لاحقًا)، تحدد هذه السمة الأدوار المسموح لها بالوصول إلى هذه الصفحة. |
الشكل 3: التنقل التفصيلي |
مجلد | اسم نموذج الويب |
Default.aspx | جذر موقع الويب |
Contact.aspx | جذر موقع الويب |
Default.aspx | منتجات |
Product1.aspx | منتجات |
Product2.aspx | منتجات |
Default.aspx | خدمات |
Service1.aspx | خدمات |
Service2.aspx | خدمات |
<%@ اللغة الرئيسية = "C#" AutoEventWireup = "صحيح" CodeFile = "MasterPage.master.cs" يرث = "MasterPage" %> <html xmlns="http://www.w3.org/1999/xhtml" > <رئيس تشغيل = "الخادم"> <عنوان>صفحة بلا عنوان</عنوان> </الرأس> <الجسم> < معرف النموذج = "form1" runat = "الخادم"> <ديف> <asp:Label ID = "Label1" runat = "server" حجم الخط = "XX-Large" ForeColor = "Blue" Text = "مرحبًا!"></asp:Label><br /> <asp:معرف SiteMapPath = "SiteMapPath1" runat = "الخادم" أسماء الخطوط = "فيردانا" حجم الخط = "0.8em" فاصل المسار = ": "> <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="الخادم"> </asp:contentplaceholder> </شعبة> </النموذج> </ الجسم> </أتش تي أم أل> |
الشكل 4: نموذج تشغيل لـ Default.aspx |
معرف الارتباط التشعبي | الخاصيةالنصية خاصية | NavigateUrl |
منتجات | HyperLink1 | ~/products/default.aspx |
خدمات | HyperLink2 | ~/Services/default.aspx |
HyperLink3 | اتصل بنا | ~/contact.aspxTable |
<%@ لغة الصفحة = "C#" MasterPageFile = "~/MasterPage.master" AutoEventWireup = "true" CodeFile = "Default.aspx.cs" يرث = "_ افتراضي" العنوان = "صفحة بدون عنوان" %> <asp:معرف المحتوى = "Content1" ContentPlaceHolderID = "ContentPlaceHolder1" Runat = "الخادم"> <المركز> <الجدول> <tr> <عرض td = "60%"> <asp:معرف التسمية = "Label1" runat = "الخادم" حجم الخط = "X-Large" Text="مرحبًا بكم في موقعنا على الويب!"></asp:Label></td> </tr> <tr> <عرض td = "60%"> <asp:معرف HyperLink = "HyperLink1" runat = "الخادم" Font-Size="X-Large" NavigateUrl="~/Products/Default.aspx">المنتجات </asp:HyperLink></td> </tr> <tr> <عرض td = "60%"> <asp:HyperLink ID = "HyperLink2" runat = "الخادم" حجم الخط = "X-Large" NavigateUrl="~/Services/Default.aspx">الخدمات </asp:HyperLink></td> </tr> <tr> <عرض td = "60%"> <asp:معرف HyperLink = "HyperLink3" runat = "الخادم" حجم الخط = "X-Large" NavigateUrl = "~/Contact.aspx">اتصل بنا </asp:HyperLink></td> </tr> </الجدول> </المركز> </asp:المحتوى> |
الشكل 5: الصفحة الافتراضية لمجلد المنتجات |
معرف الارتباط التشعبي | الخاصية النصية خاصية | NavigateUrl |
المنتج الأول | HyperLink1 | ~/products/product1.aspx |
المنتج الثاني | HyperLink2 | ~/products/product2.aspx |
الشكل 6. الصفحة الافتراضية لمجلد الخدمات |
معرف الارتباط التشعبي | الخاصية النصية خاصية | 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 لإنشاء "فتات الخبز". لاحظ أيضًا كيفية عرض الأصل مع عنوان الصفحة الحالية. حاول الانتقال إلى صفحات مختلفة ومراقبة عنصر تحكم SiteMapPath.
4. استخدم التحكم في مصدر بيانات SiteMap
لا يقتصر استخدام مخططات الموقع على عنصر تحكم SiteMapPath. يمكنك أيضًا إرفاق خريطة موقع بعنصر تحكم قابل للملاحة (مثل TreeView). في المثال التالي، ستستخدم نفس ملف مخطط الموقع لتنفيذ الربط إلى عنصر تحكم TreeView.
قم بإضافة نموذج ويب جديد SiteMapDataSourceDemo.aspx إلى موقع الويب. ثم اسحب عنصر تحكم مصدر بيانات SiteMap (SiteMapDataSource1) وعنصر تحكم TreeView (TreeView1) إلى النموذج. قم بتعيين خاصية DataSourceID لعنصر تحكم TreeView هذا إلى SiteMapDataSource1. بالإضافة إلى ذلك، قم بتعيين الخاصية ShowLines لعنصر تحكم TreeView إلى true. فيما يلي الترميز الكامل من صفحة SiteMapDataSourceDemo.aspx:
<%@ لغة الصفحة = "C#" AutoEventWireup = "صحيح" CodeFile="SiteMapDataSourceDemo.aspx.cs" يرث = "SiteMapDataSourceDemo" %> <html xmlns="http://www.w3.org/1999/xhtml" > <رئيس تشغيل = "الخادم"> <عنوان>صفحة بلا عنوان</عنوان> </الرأس> <الجسم> < معرف النموذج = "form1" runat = "الخادم"> <asp:TreeView ID = "TreeView1" runat = "الخادم" DataSourceID = "SiteMapDataSource1" ShowLines = "صحيح"> </asp:TreeView> <asp:معرف SiteMapDataSource = "SiteMapDataSource1" runat = "الخادم" /> </النموذج> </ الجسم> </أتش تي أم أل> |
الآن، قم بتشغيل نموذج الويب لترى كيف يتم إنشاء نفس بنية التنقل تلقائيًا في TreeView (انظر الشكل 8).
الشكل 8: ربط ملف خريطة الموقع بعنصر تحكم TreeView |
وصف | الخاصية |
ChildNodes | يمثل مجموعة كافة العقد الفرعية للعقدة الحالية |
HasChildNodes | إلى ما إذا كانت عقدة خريطة الموقع تحتوي على عقد فرعية (صواب/خطأ) |
العنوان | يُرجع قيمة سمة العنوان المحددة في ملف خريطة الموقع |
URL | في ملف خريطة الموقع قيمة |
وصف | سمة url المحددةترجع قيمة سمة الوصف المحددة في ملف خريطة الموقع. |
ParentNode | إلى مرجع عقدة خريطة الموقع الأصل للعقدة الحالية. |
Page_Load باطلة محمية (مرسل الكائن، EventArgs e) { int count = SiteMap.RootNode.ChildNodes.Count; ل(int i = 0; i <count; i++) { SiteMapNode smNode=SiteMap.RootNode.ChildNodes[i]; TreeNode tvNode = new TreeNode(smNode.Title, ""، ""، smNode.Url، ""); TreeView1.Nodes.Add(tvNode); إذا (smNode.HasChildNodes) { int ChildCount=smNode.ChildNodes.Count; لـ (int j = 0; j < ChildCount; j++) { SiteMapNode smChildNode = smNode.ChildNodes[j]; TreeNode tvChildNode = TreeNode الجديد (smChildNode.Title، ""، ""، smChildNode.Url, ""); tvNode.ChildNodes.Add(tvChildNode); } } } } |
هنا، تحصل أولاً على إجمالي عدد العقد الفرعية في العقدة الجذرية. ثم تقوم بالتكرار عبر مجموعة ChildNodes الخاصة بالعقدة الجذرية. في كل تكرار، يمكنك إنشاء مثيل جديد لفئة TreeNode وتحديد عنوانه وعنوان URL الخاص به في المُنشئ الخاص به. ثم يمكنك إضافة TreeNode هذا إلى مجموعة العقد الخاصة بـ TreeView. بعد ذلك، عليك التحقق مما إذا كان SiteMapNode الحالي يحتوي على أي عقد فرعية. إذا كان هناك، يمكنك اجتيازه وتكرار عملية إنشاء TreeNode. لاحظ أنك قمت هذه المرة بإضافة TreeNodes الجديدة إلى مجموعة ChildNodes الحالية لكائن TreeNode.
لاحظ أنك تستخدم 2 في الحلقة لأنك تعلم أن هناك مستويين فقط من التداخل. لجعل المنطق الخاص بك أكثر عمومية، يمكنك استخدام التكرار لملء TreeView.
قم بتشغيل نموذج الويب وسترى شيئًا مشابهًا للشكل 8 مرة أخرى.
6. استخدام صيانة السلامة
في كثير من الأحيان، تطبق مواقع الويب نموذجًا أمنيًا قائمًا على الأدوار. على سبيل المثال، يمكن أن يكون لديك أدوار مختلفة في تطبيقك مثل مسؤول النظام، ومختبر المنتج، ومختبر الخدمة. في مثل هذه المواقف، غالبًا ما تحتاج إلى التحكم في روابط التنقل في الموقع التي يتم عرضها للمستخدمين. على سبيل المثال، إذا كان المستخدم الذي قام بتسجيل الدخول حاليًا لديه دور اختبار المنتج، فقد ترغب في عرض الروابط المتعلقة بالمنتج فقط وإخفاء أي روابط أخرى. إحدى طرق التعامل مع الأدوار هي استخدام الترميز اليدوي، ومع ذلك، فهو يتطلب تنفيذ كل منطق التفويض برمجيًا. ولحسن الحظ، توفر ملفات Sitemap وعنصر تحكم مصدر بيانات SiteMap معًا ميزة تسمى "الاقتطاع الأمني" لمساعدتك.
من أجل اختبار الإصلاح الأمني، تحتاج إلى تمكين ميزات العضوية والأدوار في موقعك. افتح ملف web.config وأضف العلامات التالية:
<وضع المصادقة = "النماذج" /> < إذن > <رفض المستخدمين="؟"></deny> </التفويض> |
<roleManager مُمكّن = "صحيح" /> |
الشكل 9: إضافة الأدوار باستخدام أدوات إدارة موقع الويب |
الشكل 10: إنشاء المستخدمين باستخدام أدوات إدارة موقع الويب |
<?xml version="1.0" encoding="utf-8" ?> <siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" > <siteMapNode url="default.aspx" title="الصفحة الرئيسية" description="موقع الويب الخاص بي"> <siteMapNode title = "المنتجات" الأدوار = "اختبارات المنتج"> <siteMapNode url="~/products/product1.aspx" title="المنتج الأول" /> <siteMapNode url="~/products/product2.aspx" title="المنتج الثاني" /> </siteMapNode> <siteMapNode عنوان = "الخدمات" الأدوار = "اختبار الخدمة"> <siteMapNode url="~/services/service1.aspx" title="الخدمة الأولى" /> <siteMapNode url="~/services/service2.aspx" title="الخدمة الثانية" /> </siteMapNode> <siteMapNode url="contact.aspx" title="اتصل بنا" /> </siteMapNode> </خريطة الموقع> |
<siteMap defaultProvider="myprovider"enable="true"> < مقدمو الخدمة > <أضف اسمًا = "myprovider" اكتب = "System.Web.XmlSiteMapProvider " siteMapFile = "SecurityTrimming.sitemap" SecurityTrimmingEnabled = "true" /> </ مقدمو الخدمة> |
الشكل 11: صفحة تسجيل الدخول |
الشكل 12: استخدام تجديد السلامة |