我想在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,第二个是创建一个需要处理的新实例;)

希望它有助于:)

许可以下: CC-BY-SA归因
scroll top