Получение SPContext внутри получателя события - PullRequest
7 голосов
/ 27 февраля 2012

Я создал Event Receiver, но проблема в том, что я не могу получить ссылку на SPContext: SPContext.Current возвращает null.Мне нужно, чтобы добавить несколько списков на сайт.У кого-нибудь есть идеи, как мне это достать?

Также я попытался поместить точки останова в приемник событий, но по какой-то причине FeatureActivates никогда не срабатывает.Как правильно использовать событие, когда список активируется сразу после развертывания?

Ответы [ 3 ]

15 голосов
/ 27 февраля 2012

Вы не можете получить SPContext внутри обработчиков - это разработано.Вы должны использовать свойства события, передаваемые в качестве аргумента обработчику, чтобы получить ссылку на текущий веб-элемент, элемент списка и т. Д. Например, в обработчике с активированной функцией вы можете сделать это следующим образом:

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

Если область действия объекта - это сайт,

public override void FeatureActivated(SPFeatureReceiverProperties properties)
{
        SPSite site = properties.Feature.Parent as SPSite;  
        //Some code with web
}
5 голосов
/ 06 августа 2012

Я понял, что объем функции имеет значение. Если вы развернули эту функцию в области сайта, вы можете получить доступ к сети, используя следующую строку кода:

SPWeb web = (properties.Feature.Parent as SPSite).OpenWeb();
2 голосов
/ 07 декабря 2013

Я знаю, что эта ветка довольно старая, но на самом деле вы должны использовать:

SPWeb web = properties.OpenWeb() 

согласно рекомендациям SP: http://msdn.microsoft.com/en-us/library/ee724407.ASPX Он гарантирует, что у вас нет объектов для удаления, и удерживает вас от ошибки при касте.

...