以编程方式获取文件夹sharepoint的子项

时间:2013-01-09 09:56:19

标签: sharepoint sharepoint-2010 document-library sharepointdocumentlibrary

我被要求检索文档库的内容并将其显示在网页上,其中包含使用MVC下载的链接。我可以从库中检索所有文档而没有任何问题。但是,当文档存储在我的文档库的子文件夹中时,我的链接只打开文件夹。

我的文档库结构是

  • 文档库
  • 文件1
  • 文件2
  • 文件3
    • 文件夹1
      • 文件4
    • 文件夹2
      • 文件5

我需要能够从文件夹中获取子文档,而不仅仅是文档库中的文档。

这是我的代码:

namespace SharePointMVC.Controllers
{
    [HandleError]
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            DefaultModel model = new DefaultModel();
            List<DocumentModel> documents = new List<DocumentModel>();
            List<FolderModel> folders = new List<FolderModel>();
            List<object> itemModels = new List<object>();

            using (ClientContext context = new ClientContext("MYSPSITE"))

            {
                List list = context.Web.Lists.GetByTitle("MYDOCUMENTLIBRARY");
                context.Load(list);
                CamlQuery query = new CamlQuery();
                query.ViewXml = "<View/>";
                ListItemCollection listitems = list.GetItems(query);

                context.Load(list);
                context.Load(listitems);
                context.ExecuteQuery();

                foreach (ListItem listItem in listitems)
                {
                    IEnumerable<object> items = ProcessListItems(listItem);
                    itemModels.AddRange(items);
                }

                model.Documents = documents;
            }

            return View(model);
        }

        public IEnumerable<object> ProcessListItems(ListItem listItem)
        {
            List<object> items = new List<object>();
            if (listItem.FileSystemObjectType == FileSystemObjectType.Folder)
            {
                FolderModel FolderModel = new FolderModel();
                foreach (ListItem childListItem in listItem.childItems)
                {
                    IEnumerable<object> childItems = ProcessListItems(childListItem);
                }
                items.Add(FolderModel);
            }
            else
            {
                DocumentModel documentModel = new DocumentModel();
                items.Add(documentModel);
            }
        }

        public ActionResult About()
        {
            return View();
        }
    }
}

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

尝试将query.ViewXml = "<View/>";更改为query.ViewXml = "<View Scope=\"Recursive\"/>";

这告诉SharePoint返回所有文件夹中的项目。如果您还想要返回文件夹信息,请将Recursive更改为RecursiveAll。