Получение 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 Он гарантирует, что у вас нет объектов для удаления, и удерживает вас от попадания в ошибку приведения.