2012-02-27 8 views
7

イベントレシーバーを作成しましたが、SPContextへの参照を取得できません:SPContext.Currentnullです。サイトにいくつかのリストを追加する必要があります。どのように私はそれを得ることができるのか誰かが考えていますか?イベントレシーバー内でSPContextを取得する

また、イベントレシーバー内にブレークポイントを配置しようとしましたが、何らかの理由でFeatureActivatesがトリガーされません。展開直後にリストをアクティブにするときに使用する正しいイベントは何ですか?

答えて

14

SPContextをハンドラ内で取得することはできません。これは設計によるものです。機能の範囲は、[サイトの場合

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

:あなたはこのようにそれを行うことができます機能アクティブ化ハンドラ内で例えば現在のWebへの参照を取得するために、ハンドラに引数として渡されたイベントプロパティ、リスト項目など を使用する必要があります
public override void FeatureActivated(SPFeatureReceiverProperties properties) 
{ 
     SPSite site = properties.Feature.Parent as SPSite; 
     //Some code with web 
} 
+0

私は何をしましたか、ありがとう;) –

5

私は、機能の範囲が重要であると考えました。あなたはサイトスコープに機能をデプロイした場合、あなたのコード行を使用してWebを取得できます。

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

私はこのスレッドが古いの一種である知っているが、本当にあなたが使用する必要があります。

SPWeb web = properties.OpenWeb() 

SPのベストプラクティスに従って:http://msdn.microsoft.com/en-us/library/ee724407.ASPX これは、処理するオブジェクトがないことを保証し、キャストエラーを起こさないようにします。

+2

これはフィーチャーレシーバ用ではありません。 –

関連する問題