Получение SPContext внутри получателя события

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

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

3 ответа

Решение

Вы не можете получить 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
}

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

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

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

SPWeb web = properties.OpenWeb() 

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

Другие вопросы по тегам