2012-02-27 15 views
7

Creé un Receptor de eventos, pero el problema es que no puedo obtener una referencia al SPContext: SPContext.Current devuelve null. Lo necesito para agregar algunas listas al sitio. ¿Alguien tiene una idea de cómo podría conseguirlo?Obtención de SPContext dentro del receptor de eventos

También intenté poner puntos de interrupción dentro del receptor de eventos, pero FeatureActivates nunca se dispara por alguna razón. ¿Cuál es el evento correcto para usar cuando una lista se activa justo después de la implementación?

Respuesta

14

No se pueden obtener SPContext manipuladores interiores, esto es por diseño. Debe utilizar propiedades de eventos pasados ​​como argumento al manejador de conseguir referencia a la web actual, elemento de la lista etc. Por ejemplo, en función de controlador activado puede hacerlo de esta manera:

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

Si Característica del alcance es entonces Sitio

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

Lo que hice, gracias;) –

5

Me di cuenta de que el alcance de la función es importante. Si ha implementado la función en el ámbito de sitio, entonces puede obtener en la web usando esta línea de código:

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

Sé que este hilo es un poco viejo, pero en realidad se debe utilizar:

SPWeb web = properties.OpenWeb() 

según las mejores prácticas de SP: http://msdn.microsoft.com/en-us/library/ee724407.ASPX Asegura que no tiene objetos para deshacerse y evita que golpee un error de fundición.

+2

Esto no es para los receptores de funciones. –

Cuestiones relacionadas