2012-02-27 66 views
7

我创建了一个事件接收器,但问题是我无法获得对SPContext的返回:SPContext.Current返回null。我需要它来为网站添加一些列表。有没有人有我如何得到它的想法?在事件接收器中获取SPContext

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

回答

14

您不能在处理程序中获得SPContext - 这是设计。您应该使用作为参数传递的事件属性的处理程序来获取参考至目前的网络,列表项等 例如,在功能激活的处理器,你可以做这样的:

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 
} 
+0

我做了什么,谢谢;) – 2012-02-27 21:07:52

5

我想这个功能的范围很重要。如果您在站点范围部署的功能,那么您可以使用此行代码获取网页:

SPWeb web = (properties.Feature.Parent as SPSite).OpenWeb(); 
2

我知道这个线程是慈祥的老人,但真的是你应该使用:

SPWeb web = properties.OpenWeb() 

根据SP最佳实践:http://msdn.microsoft.com/en-us/library/ee724407.ASPX 它确保您没有任何对象可以处理,并防止发生铸件错误。

+2

这不是用于特征接收器。 – 2014-06-24 13:30:06