Программно получить дочерние элементы библиотеки документов, используя рекурсию

Мне нужно просмотреть содержимое библиотеки документов и отобразить их на веб-странице с помощью MVC. Однако при попытке запустить свой код я получаю следующую ошибку: «Коллекция не была инициализирована. Она не была запрошена или запрос не был выполнен. Возможно, ее необходимо запросить явно».

Любая помощь будет оценена по достоинству!

Вот мой код:

public class HomeController : Controller
    {
        public ActionResult Index()
        {
            DefaultModel model = new DefaultModel();


            using (ClientContext context = new ClientContext("MySPSite"))
            {
                List list = context.Web.Lists.GetByTitle("DocumentLibrary");
                Folder rootFolder = list.RootFolder;

                IEnumerable<SharePointItemBaseModel> items = ProcessFolder(rootFolder);
                model.items.AddRange(items);
            }

            return View(model);
        }

        public IEnumerable<SharePointItemBaseModel> ProcessFolder(Folder folder)
        {
            List<SharePointItemBaseModel> listItems = new List<SharePointItemBaseModel>();
            foreach (Folder childFolder in folder.Folders)
            {
                FolderModel folderModel = new FolderModel();
                IEnumerable<SharePointItemBaseModel> childFolders = ProcessFolder(childFolder,context);
                folderModel.Items.AddRange(childFolders);
                listItems.Add(folderModel);
            }

            foreach (Microsoft.SharePoint.Client.File file in folder.Files)
            {
                DocumentModel documentModel = new DocumentModel();
                documentModel.Name = file.Title;
                documentModel.modifiedBy = file.ModifiedBy.ToString();
                listItems.Add(documentModel);
            }

            return listItems;
        }

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

person Josh Price    schedule 21.01.2013    source источник


Ответы (1)


Мне удалось исправить это самостоятельно.

В моем рекурсивном методе я только что использовал

контекст.Загрузить(папка.Папки);

и

контекст.Загрузить(папка.Файлы);

это инициализировало коллекцию, позволяя мне использовать ее в моих циклах foreach

person Josh Price    schedule 21.01.2013
comment
Я настоятельно рекомендую прочитать эту статью о клиентской объектной модели SharePoint; codeproject.com/Articles/268193/ - person Christopher McAtackney; 21.01.2013