我试图以四种不同的方式做到这一点:
像这样:
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部件不在此页面上。”。
任何想法如何正确地做到这一点?
答案 0 :(得分:2)
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);
}