7

我创建了一个事件接收器,但问题是我无法获得对SPContext: SPContext.Currentreturns的引用null。我需要它来向网站添加一些列表。有谁知道我怎么能得到它?

我也尝试在事件接收器中放置断点,但FeatureActivates由于某种原因从未触发。部署后立即激活列表时使用的正确事件是什么?

4

3 回答 3

15

你不能SPContext进入处理程序 - 这是设计使然。您应该使用作为参数传递给处理程序的事件属性来获取对当前 Web、列表项等的引用。例如,在功能激活处理程序中,您可以这样做:

public override void FeatureActivated(SPFeatureReceiverProperties properties)
{
    SPWeb web = properties.Feature.Parent as SPWeb;  
    //Some code with web
}

如果功能范围是站点,则

public override void FeatureActivated(SPFeatureReceiverProperties properties)
{
        SPSite site = properties.Feature.Parent as SPSite;  
        //Some code with web
}
于 2012-02-27T19:30:48.503 回答
5

我认为功能的范围很重要。如果您在站点范围内部署了该功能,那么您可以使用以下代码行获取 Web:

SPWeb web = (properties.Feature.Parent as SPSite).OpenWeb();
于 2012-08-06T18:13:15.640 回答
2

我知道这个线程有点旧,但你真的应该使用:

SPWeb web = properties.OpenWeb() 

根据 SP 最佳实践: http: //msdn.microsoft.com/en-us/library/ee724407.ASPX 它确保您没有要处理的对象并防止您遇到强制转换错误。

于 2013-12-06T22:49:18.327 回答