Sharepoint:如何正确获取当前站点/ web /列表

时间:2010-04-26 08:18:31

标签: sharepoint sharepoint-2007

获取当前网站/网站/列表的最佳方式是什么?

选项1 - 重用现有对象

        SPSite site = SPContext.Current.Site;
        SPweb web = SPContext.Current.Web;
        SPList list = SPContext.Current.List;

选项2 - 创建新对象

        SPSite site = new SPSite(SPContext.Current.Site.ID); // dispose me
        SPweb web = site.OpenWeb(SPContext.Current.Web.ID); // dispose me
        SPList list = web.Lists[SPContext.Current.List.ID];

在某些情况下使用选项1时遇到问题。从那时起,我选择了第二个选项,到目前为止工作正常。

您对此有何看法?我最好选择2吗?其他建议?

2 个答案:

答案 0 :(得分:4)

使用选项一,因为它不需要创建新对象,因为它更具资源效率(例如,OpenWeb方法涉及查询数据库以完成它的工作)。但是你不能从SPContext中处理对象,这肯定会给你带来麻烦。

如果您的代码未在应用程序页面(如SharePoint计时器或工作流程)的上下文中运行,则必须使用选项二,因为SPContext.Current对象将为null。

Link

是的,如果您打开SPWeb或SPSite对象,you MUST dispose it

答案 1 :(得分:2)

我通常使用选项2(我相信Microsoft推荐的方法),但我倾向于使用using包装内容以确保它们被正确处理。例如:

using (SPSite site = new SPSite("MY SITE URL"))
{
  using (SPWeb web= site.OpenWeb())
   {
       // Do stuff
   }
} 

此方法允许您明确何时创建和销毁对象。