Ottenere SPContext all'interno del ricevitore di eventi
-
13-11-2019 - |
Domanda
Ho creato un ricevitore di eventi, ma il problema è che non riesco a ottenere un riferimento al SPContext
: SPContext.Current
ritorna null
. Ne ho bisogno per aggiungere alcuni elenchi al sito. Qualcuno ha un'idea di come potrei ottenerlo?
Inoltre ho provato a mettere i punti di pausa all'interno del ricevitore dell'evento, ma FeatureActivates
Non innesca mai per qualche motivo. Qual è l'evento corretto da utilizzare quando un elenco viene attivato subito dopo la distribuzione DE?
Soluzione
Non puoi ottenere SPContext
Interni di gestori - Questo è di progettazione. Dovresti utilizzare le proprietà degli eventi passati come argomento al gestore per ottenere riferimento al Web corrente, elemento elenco ecc. Ad esempio nel gestore attivato da funzionalità puoi farlo in questo modo:
public override void FeatureActivated(SPFeatureReceiverProperties properties)
{
SPWeb web = properties.Feature.Parent as SPWeb;
//Some code with web
}
Se l'ambito di funzionalità è il sito, allora
public override void FeatureActivated(SPFeatureReceiverProperties properties)
{
SPSite site = properties.Feature.Parent as SPSite;
//Some code with web
}
Altri suggerimenti
Ho pensato che l'ambito della funzione sia importante. Se hai distribuito la funzione nell'ambito del sito, è possibile ottenere il Web utilizzando questa riga di codice:
SPWeb web = (properties.Feature.Parent as SPSite).OpenWeb();
So che questo thread è un po 'vecchio, ma in realtà dovresti usare:
SPWeb web = properties.OpenWeb()
Secondo le migliori pratiche SP: http://msdn.microsoft.com/en-us/library/ee724407.aspxTi assicura di non avere oggetti da smaltire e ti impedisce di colpire un errore di casting.