2012-02-27 62 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