通过两种方式获取SPWeb对象
-
10-12-2019 - |
题
我想在FeatureActivated方法下访问feature中的SPWeb对象。有两种方法可以做到这一点:
公共复盖void FeatureActivated(SPFeatureReceiverProperties属性) {
//Method 1
SPWeb web = properties.Feature.Parent as SPWeb;
//方法2
SPSite site = new SPSite("http://merdev-moss:5050");
SPWeb web = site.OpenWeb();
}
两种方法有什么不同?在哪种情况下哪一个最好?
解决方案
您不需要将spcodbootsitoot= spcontext.current.site.rootweb中使用语句,因为它是从spcontext.current.site获得的,并将自动配置。
其他提示
阿法伊克,
properties.Feature.Parent
会在上下文中给你SPWeb FeatureActivated
事件正在调用。..这意味着您不应该处置这个对象,因为它是当前上下文激活该特性!
但是,如果您使用:
SPSite site = new SPSite("http://merdev-moss:5050");
SPWeb web = site.OpenWeb();
这意味着你正在创建一个新的上下文,你需要处理这个连接,如果你在使用它的内部使用它,它将自动完成
using (SPSite site = new SPSite("http://merdev-moss:5050"))
{
using (SPWeb web = site.OpenWeb())
{
//do stuff
}
}
第一个选项意味着该功能需要被挖掘为Web以使用该方法,如果更改所需的范围,则更改方法,因为它将抛出异常。只有当您需要Web时,才能使用该方法而不是其他!你选择的任何范围都相同。
第二个我更喜欢它不依赖于特征的范围,
对我来说我会使用这个:
SPWeb oWebsiteRoot = SPContext.Current.Site.RootWeb
.
更详细的详细信息,可以使用它来实现您想要的内容:
http://msdn.microsoft.com/cn-US / Library / Microsoft.SharePoint.SpWeb.aspx
第一个是使用当前的Web,第二个是创建一个需要处理的新实例;)
希望它有助于:)