Удаление веб-части со страницы программно - проблема с использованием - PullRequest
1 голос
/ 07 сентября 2011

Я пытался сделать это четырьмя различными способами:

Как это:

try
{
    SPSite site = SPContext.Current.Site;
    SPWeb web = site.OpenWeb();
}
catch (Exception ex) {}

И вот так:

try
{
    using (SPSite site = SPContext.Current.Site) {
       using (SPWeb web = site.OpenWeb()) {
       }
     }
}
catch (Exception ex) {}

И в других 2 комбинациях с / без употребления и 2 других с

SPWeb web = SPContext.Current.Web;

Каждый из них дает мне одну из двух ошибок:

"Попытка использовать объект SPWeb, который был закрыт или удален и больше не действителен."

или

«Операция не может быть завершена, поскольку веб-часть отсутствует на этой странице.».

Есть идеи, как это сделать правильно?

Ответы [ 3 ]

2 голосов
/ 07 сентября 2011

С Удаление объектов :

Объекты SPContext управляются средой SharePoint и не должны явно размещаться в вашем коде. Это также верно для объектов SPSite и SPWeb, возвращаемых SPContext.Site, SPContext.Current.Site, SPContext.Web и SPContext.Current.Web.

Для получения дополнительной информации см. Шаблоны утилизации SharePoint 2007 и WSS 3.0 по примеру . Также вы можете использовать SPDisposeCheck . Это руководство, когда и когда не следует удалять объекты SharePoint.

Если по-прежнему появляется ошибка SPContext.Current.Site даже после удаления неправильных значений, попробуйте перезапустить пул приложений или запустите iisreset.

1 голос
/ 07 сентября 2011

Я сомневаюсь, что проблема в spcontext. Но вы не должны избавляться от контекстной сети. Можете ли вы опубликовать свой полный блок кода, чтобы увидеть, в чем проблема.

0 голосов
/ 08 сентября 2011

Вот код:

            try
        {
            // usings here

            web.AllowUnsafeUpdates = true;
            SPLimitedWebPartManager man = web.GetLimitedWebPartManager("FormServerTemplates/Statistica.aspx", PersonalizationScope.Shared);

            ContentEditorWebPart wp = new ContentEditorWebPart();
            wp.ID = "newlyCreatedWP";

            man.AddWebPart(wp, this.Zone.ID, 2);
            web.AllowUnsafeUpdates = false;
            web.Update();
        }
        catch (Exception e)
        {
            Label l = new Label();
            l.Text = e.Message;
            this.Controls.Add(l);
        }
...