В чем разница между SPContext.Current.Web.URL и SPContext.Current.Сайтом при использовании объекта SPSite?
Вопрос
SPSite spsite1=new SPSite(SPContext.Current.Web.URL);
SPSite spsite2=SPContext.Current.Site;
В чем разница и когда мы решаем, какой из них использовать?
Я чувствую, что оба дают нам объект семейства сайтов.
Пример: SPWeb spweb=spsite1.RootWeb;
будет означать то же самое, что spsite2.RootWeb;
Тогда почему существует 2 способа сделать это?
Решение
SPSite spsite1=new SPSite(SPContext.Current.Web.Url);
даст тебе SPSite
объект.Но это будет объект семейства сайтов только тогда, когда SPContext.Current.Web.Url
это корневая сеть.Если веб-объект является объектом подсайта, то SPSite
объект не будет объектом семейства веб-сайтов.Второе утверждение SPSite spsite2=new SPSite(SPContext.Current.Site);
является неправильным, потому что нет перегрузки SPSite
который имеет SPSite
в качестве параметра.
ОБНОВЛЕНИЕ
Если намерение состоит в том, чтобы получить rootweb, то второй - лучший способ сделать это, поскольку вы не создаете новый экземпляр SPSite
объект.Более того, в первом случае вам нужно будет утилизировать SPSite
объект, когда вы создаете новый, по сравнению со вторым, в котором SPSite
извлекается через SPContext
которые не должны удаляться явно.
Другие советы
Как site1, так и site2 возвращают один и тот же объект семейства веб-сайтов (SPSite).Вызывая свойство RootWeb для обоих объектов, мы можем получить один и тот же объект веб-сайта верхнего уровня (SPWeb).
Инструкция 1:SPSite spsite1=новый SPSite(SPContext.Current.Web.URL);
Процесс:Если мы находимся на дочернем сайте и вызываем приведенный выше код, сначала он получает текущий веб-URL дочернего сайта и передает его конструктору SPSite, чтобы получить текущий объект семейства сайтов.
Инструкция 2:SPSite spsite2 = SPContext.Current.Site Текущий сайт;
Процесс:Теперь мы находимся на дочернем сайте и вызываем приведенный выше код, который непосредственно извлекает объект семейства сайтов.Для получения SiteCollection не требуется искать параметр web url.
Результат:
spsite1.RootWeb и spsite2.RootWeb возвращают один и тот же веб-объект SPWeb верхнего уровня.
spsite1.OpenWeb() возвращает объект дочернего сайта (SPWeb), если мы находимся на дочернем сайте.spsite2.OpenWeb() возвращает объект сайта верхнего уровня (SPWeb), даже если мы находимся на дочернем сайте.
Для spsite1 мы должны вызвать метод dispose, чтобы удалить объект SPSite.Но для spsite2 sharepoint позаботится об удалении объекта SPSite.