ما الفرق بين SPContext.Current.Web.URL وSPContext.Current.Site عند استخدام كائن SPSite؟
سؤال
SPSite spsite1=new SPSite(SPContext.Current.Web.URL);
SPSite spsite2=SPContext.Current.Site;
ما الفرق ومتى نقرر أيهما سنستخدم؟
أشعر أن كلاهما يقدم لنا كائن مجموعة المواقع.
مثال: SPWeb spweb=spsite1.RootWeb;
سوف يعني نفس spsite2.RootWeb;
إذن لماذا هناك طريقتان للقيام بذلك؟
المحلول
SPSite spsite1=new SPSite(SPContext.Current.Web.Url);
سوف أعطيك SPSite
هدف.ولكن سيكون كائن مجموعة الموقع فقط عندما SPContext.Current.Web.Url
هو شبكة الجذر.إذا كان كائن الويب هو موقع فرعي، إذن SPSite
لن يكون الكائن كائن مجموعة مواقع مشتركة.البيان الثاني SPSite spsite2=new SPSite(SPContext.Current.Site);
هو الخطأ لأنه لا يوجد الزائد SPSite
الذي لديه SPSite
كمعلمة.
تحديث
إذا كانت النية هي الحصول على شبكة الجذر، فإن الطريقة الثانية هي الطريقة الأفضل للقيام بذلك لأنك لا تقوم بإنشاء نسخة جديدة SPSite
هدف.علاوة على ذلك، في الحالة الأولى سوف تحتاج إلى التخلص منها SPSite
كائن أثناء قيامك بإنشاء كائن جديد مقارنةً بالثاني الذي فيه SPSite
يتم استرجاعها من خلال SPContext
والتي لا ينبغي التخلص منها صراحة.
نصائح أخرى
يقوم كل من site1 وsite2 بإرجاع نفس كائن مجموعة الموقع (SPSite).من خلال استدعاء خاصية RootWeb على كلا الكائنين، يمكننا الحصول على نفس كائن موقع الويب ذي المستوى الأعلى (SPWeb).
التعليمات 1:SPSite spsite1=new SPSite(SPContext.Current.Web.URL);
عملية:إذا كنا في موقع فرعي وقمنا باستدعاء الكود أعلاه، فيجب أولاً الحصول على عنوان URL الحالي للموقع الفرعي وتمريره إلى مُنشئ SPSite للحصول على كائن مجموعة الموقع الحالي.
التعليمات 2:SPSite spsite2 = SPContext.Current.Site;
عملية:نحن الآن في الموقع الفرعي ونستدعي الكود أعلاه، والذي يسترد كائن مجموعة الموقع مباشرة.لا يوجد أي معلمة URL للبحث على الويب للحصول على SiteCollection.
نتيجة:
يقوم spsite1.RootWeb وspsite2.RootWeb بإرجاع نفس كائن SPWeb على الويب ذو المستوى الأعلى.
تقوم spsite1.OpenWeb() بإرجاع كائن الموقع الفرعي (SPWeb) إذا كنا في الموقع الفرعي.تقوم spsite2.OpenWeb() بإرجاع كائن موقع المستوى الأعلى (SPWeb)، حتى لو كنا في موقع فرعي.
بالنسبة إلى spsite1، يتعين علينا استدعاء طريقة التخلص للتخلص من كائن SPSite.لكن بالنسبة إلى spsite2، ستهتم نقطة المشاركة بالتخلص من كائن SPSite.