2012-02-27 15 views
7

Ho creato un destinatario di eventi, ma il problema è che non riesco a ottenere un riferimento allo SPContext: SPContext.Current restituisce null. Ho bisogno di aggiungere alcune liste al sito. Qualcuno ha un'idea di come potrei ottenerlo?Ottenere SPContext nel ricevitore di eventi

Inoltre, ho provato a inserire punti di interruzione all'interno del ricevitore dell'evento, ma il FeatureActivates non si attiva mai per qualche motivo. Qual è l'evento corretto da utilizzare quando viene attivato un elenco subito dopo la distribuzione?

risposta

14

Non è possibile ottenere SPContext all'interno di gestori - questo è di progettazione. Si dovrebbe usare le proprietà di evento passato come argomento al gestore di ottenere riferimento al Web corrente, elemento della lista ecc Per esempio in funzione di gestore attivata si può fare in questo modo:

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

Se Caratteristica Scope è sito allora

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

Cosa ho fatto, grazie;) –

5

Ho pensato che lo scopo della funzionalità è importante. Se è stato distribuito la funzione del perimetro del sito quindi è possibile ottenere sul web utilizzando questa riga di codice:

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

So che questa discussione è una specie di vecchio, ma in realtà si dovrebbe usare:

SPWeb web = properties.OpenWeb() 

come da best practice SP: http://msdn.microsoft.com/en-us/library/ee724407.ASPX Assicura che non ci siano oggetti da smaltire e ti impedisca di colare un errore di lancio.

+2

Questo non è per ricevitori di funzioni. –

Problemi correlati