Вопрос

Привет, я пытаюсь получить элемент списка и хотите знать, является ли это хорошей практикой.

   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...
.

У нас есть 1 коллекция сайта с 50 субтом и дополнительными субзитациями.Мой вопрос;

Предположим, что я нахожусь на одном из субзитов под управлением Subsite Number 10, и этот код выполнен, то будет ли он все еще будет получать список корневых веб-списка или дать ошибку?

Я запутался, потому что значение SPContext.Current.Web.url будет текущим URL-адресом в соответствующем месте.Тогда код все еще работает?

Это было полезно?

Решение

Ваш создание нового сайта, которое не расположено, SPCONTEXT.CRURRENT.Web.URL создает только URL строки.

Правильный путь:

   using (SPSite spsite = new SPSite(SPContext.Current.Web.Url))
   {
        SPWeb spWeb = spsite.RootWeb;

        SPList spList = spWeb.Lists.TryGetList("MyList");
   }
.

Нет необходимости утилизировать SPWEB, как вы заметили, нет новостей.Это использует новый веб-объект SPSite.Если вы распознаете, это приведет к ошибкам на ULS:

Обнаружено использование SPREQUEST для ранее закрытого объекта SPWEB.Пожалуйста Закройте объекты SPWEB, когда вы закончите всеми объектами, полученными из их, но не раньше.

Другой способ использовать код:

SPWeb spWeb = SPContext.Current.Site.RootWeb;
SPList spList = spWeb.Lists.TryGetList("MyList");
.

Как вы можете видеть, нет необходимости распоряжаться как его использование текущего объекта WornWeb сайта, который не должен быть утилизирован и меньшим количеством кода / системных ресурсов!

Другие советы

Как указано @Robert, он закуривет корневой паутину.Тем не менее, вам не нужно распоряжаться объектом SPWeb, извлеченным из свойства SPSite.RootWeb.Вы также можете напрямую получить объект SPSite из SPSite spsite = SPContext.Current.Site; SPContext и, следовательно, не нужно его распоряжаться вместо того, чтобы создать новый, который должен быть явно утилизирован.

Это закуривет рутреб.

Но, пожалуйста, не забудьте утилизировать SPSite, если вы закончите, если вы не используете «Использование-оператор»:

spsite.Dispose()
.

Вы можете использовать SPContext.Current.Site.Url, при создании объекта SPSITE внутри вашего кода, затем используйте site.OpenWeb(), который даст корневую веб-код (поскольку Obsite Conts (поскольку объект 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