以编程方式从页面中删除Web部件 - 使用问题

时间:2011-09-07 13:47:03

标签: c# sharepoint sharepoint-2007 web-parts moss

我试图以四种不同的方式做到这一点:

像这样:

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对象。”

“无法完成操作,因为Web部件不在此页面上。”。

任何想法如何正确地做到这一点?

3 个答案:

答案 0 :(得分:2)

来自Disposing Objects

  

SPContext对象由SharePoint框架管理,不应在代码中明确处理。对于SPContext.Site,SPContext.Current.Site,SPContext.Web和SPContext.Current.Web返回的SPSite和SPWeb对象也是如此。

有关详细信息,请参阅SharePoint 2007 and WSS 3.0 Dispose Patterns by Example。此外,您可能希望使用SPDisposeCheck。它提供了何时以及何时不处置SharePoint对象的指导。

如果在删除错误的使用后仍然在SPContext.Current.Site上仍然出现错误,请尝试回收应用程序池或运行iisreset。

答案 1 :(得分:1)

我怀疑spcontext是个问题。但是你不应该处理上下文网络。您可以发布完整的代码块以查看问题所在。

答案 2 :(得分:0)

以下是代码:

            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);
        }