SPContext有什么区别。电流。网络。URL和SPContext。电流。使用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
是根网的。如果web对象是子网站的对象,则 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。电流。网络。URL);
过程:如果我们在subsite中,并且我们正在调用上面的代码,首先它获取当前subsite web url并将其传递给SPSite构造函数以获取当前网站集对象。
指示2:SPSite spsite2=SPContext。电流。网站;
过程:现在我们在subsite中,我们正在调用上面的代码,它直接重试网站集对象。没有寻找web url参数来获取SiteCollection。
结果:
spsite1.RootWeb和spsite2。RootWeb返回相同的顶级web SPWeb对象。
spsite1.OpenWeb()返回子网站(SPWeb)对象,如果我们在子网站。spsite2。OpenWeb()返回顶级站点(SPWeb)对象,即使我们在subsite中。
对于spsite1,我们必须调用dispose方法来处理SPSite对象。但是对于spsite2,sharepoint将处理SPSite对象。