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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top