3

我在连接到 Sharepoint 的 Web 服务中有以下代码:

string response = string.Empty;

SPSecurity.RunWithElevatedPrivileges(new SPSecurity.CodeToRunElevated(delegate()
{
    using (SPSite spsite = new SPSite("http://sharepoint/"))
    {
        using (SPWeb spweb = spsite.OpenWeb("sites/" + site))
        {
            spweb.AllowUnsafeUpdates = true;

            SPFolder spfolder = spweb.GetFolder(path);

            /* The following value will always be set to FALSE
             * but the next time spfolder.Exists is called, the
             * returned value will be true.
             */
            //bool exists = spfolder.Exists;

            if (spfolder == null || !spfolder.Exists)
                response = "Folder Does Not Exist!";
            else
                response = "Folder Exists!";
        }
    }
}

return response;

如果我从顶部开始逐步调试它,上面的代码工作得非常好。如果我在没有调试的情况下运行它,或者如果我稍后在代码中的某处放置断点,则 SPFolder.Exists 值始终设置为 false,而实际上它应该为 true。如果我取消注释bool exists上面的行,那么它会正常工作。

我在这里做错了吗?

4

2 回答 2

1

好吧,我弄清楚了问题所在。显然,您只能在 SPSite 对象和 SPWeb 的站点/子站点中指定站点集合。我试图做的是打开一个网站,它是另一个网站集的根网站。

这篇文章帮助我弄清楚了这一点。

将代码更改为类似这样可以解决问题:

// Specify ONLY the site collection here
using (SPSite spsitecollection = new SPSite("http://sharepoint/sites/" + srcSiteCollection))
{
    // Specify the site/subsite
    using (SPWeb spweb = spsitecollection.OpenWeb(srcSite))
    {

        spweb.AllowUnsafeUpdates = true;

        SPFolder spfolder = spweb.GetFolder(path);

        // No errors anymore!
        if (spfolder == null || !spfolder.Exists)
            response = "Folder Does Not Exist!";
        else
            response = "Folder Exists!";
    }
}
于 2013-08-29T20:28:00.800 回答
1

可能的答案:要求SPFolderfirst 的一些更有趣的属性,甚至 callToString就足够了(可能是因为它在调试器中工作,ToString当您将鼠标悬停在spFolder变量上时将调用该属性)。

于 2013-08-28T20:56:31.043 回答