0

ドキュメントライブラリのコンテンツを取得し、MVCを使用してダウンロードするためのリンクを含むWebページに表示するように依頼されました。ライブラリからすべてのドキュメントを問題なく取得できます。ただし、ドキュメントがドキュメントライブラリのサブフォルダに保存されている場合、リンクはフォルダを開くだけです。

私のドキュメントライブラリの構造は

  • ドキュメントライブラリ
  • ドキュメント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();
        }
    }
}

どんな助けでも大歓迎です!

4

1 に答える 1

1

に変更query.ViewXml = "<View/>";してみてくださいquery.ViewXml = "<View Scope=\"Recursive\"/>";

これにより、SharePoint はすべてのフォルダーからアイテムを返すようになります。フォルダー情報も返す必要がある場合は、Recursive を RecursiveAll に変更します。

于 2013-01-09T14:47:02.333 に答える