سؤال

مرحبًا، أحاول جلب عنصر قائمة وأريد معرفة ما إذا كانت هذه ممارسة جيدة.

   SPSite spsite = new SPSite(SPContext.Current.Web.Url);
                    SPWeb spWeb = spsite.RootWeb;
                    SPList spList = spWeb.Lists.TryGetList("MyList");
//here is the code to fetch the values...

لدينا مجموعة مواقع واحدة تحتوي على 50 موقعًا فرعيًا والمزيد من المواقع الفرعية بداخلها.سؤالي هو؛

لنفترض أنني موجود في أحد المواقع الفرعية ضمن الموقع الفرعي رقم 10 وتم تنفيذ هذا الرمز، فهل سيستمر في التقاط قائمة الويب الجذرية أم سيعطي خطأ؟

أنا في حيرة من أمري لأن قيمة SPContext.Current.Web.Url ستكون عنوان URL الحالي في الموقع المعني.إذن هل سيظل الكود يعمل؟

هل كانت مفيدة؟

المحلول

إنشاء موقع جديد غير صحيح، SPCONTEXT.CURRENT.WEB.URL يولد فقط عنوان URL السلسلة.

الطريقة الصحيحة: giveacodicetagpre.

ليست هناك حاجة للتخلص من SPWEB كما لاحظت أنه لا يوجد جديد.لها باستخدام كائن SPSITE New Web.إذا كنت تتخلص من ذلك، فسيؤدي إلى أخطاء على ULS:

تم اكتشافه باستخدام العنكبوت كائن Spweb مغلقة سابقا.لو سمحت أغلق كائنات Spweb عند الانتهاء من جميع الكائنات التي تم الحصول عليها من لهم، ولكن ليس من قبل.

طريقة أخرى لاستخدام الرمز سيكون: giveacodicetagpre.

كما ترون ليس هناك حاجة للتخلص من استخدام كائن جذر الموقع الحالي الذي يجب أن يتم التخلص منها وأقل من موارد النظام / النظام!

نصائح أخرى

كما أشارRobert، فإنه سوف يلتقط شبكة الجذر.ومع ذلك، لا تحتاج إلى التخلص منها SPWeb الكائن الذي تم استرجاعه من SPSite.RootWeb ملكية.يمكنك أيضًا الحصول على SPSite كائن من SPContext SPSite spsite = SPContext.Current.Site; وبالتالي لا يلزم التخلص منه بدلاً من إنشاء مثيل جديد يحتاج إلى التخلص منه بشكل صريح.

سوف تلتقط الجذور.

ولكن يرجى تذكر أن تتخلص من spsite عند الانتهاء، إن لم يكن باستخدام "استخدام عبارة": giveacodicetagpre.

يمكنك استخدام SPContext.Current.Site.Url, ، أثناء إنشاء كائن SPSite داخل التعليمات البرمجية الخاصة بك، ثم استخدمه site.OpenWeb(), ، والذي سيعطي الويب الجذر (نظرًا لأنه تم إنشاء كائن SPSite باستخدام عنوان URL للموقع).من الأفضل دائمًا استخدامه using للتخلص من الأشياء.

using (SPSite site=new SPSite(SPContext.Current.Site.Url))
            {
                using(SPWeb web=site.OpenWeb())//always gets you the root web
                {

                }
             }

انظر هذه المدونة حول SPDisposeCheck أفضل الممارسات.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى sharepoint.stackexchange
scroll top