XsltListViewWebPart забывает текущий веб-сайт при отображении на странице макетов

sharepoint.stackexchange https://sharepoint.stackexchange.com//questions/40750

Вопрос

Я добавляю очень простой XsltListViewWebPart на страницу приложения.Вот так:

XsltListViewWebPart lvWebPart = new XsltListViewWebPart { ChromeType = PartChromeType.None, ListUrl = "/somesite/list" };
Page.Controls.Add(lvWebPart);

Все работает нормально (могу скачивать файлы, создавать папки, выбирать разные виды и т.д.) - но ссылки на папки имеют неправильный href:они всегда указывают на корневую сеть!

Посмотрите эти примеры:enter image description here

Как видите, документ правильно ссылается на ../sites/sr/doclib/mydocument.docx, однако при просмотре папок они забывают, в каком контексте они сейчас находятся (они находятся в http://../sites/sr/_layouts/../../..Detail.aspx?RootFolder=..., важная часть — /sites/sr/).Они пытаются перейти в папку _layouts в контексте корневого семейства сайтов, как показано выше: http://../_layouts/../../..Detail.aspx?RootFolder=...

Или еще раз резюмирую:

  • Расположение страницы приложения:
    • http://sp/sites/sr/_layouts/my/application/Detail.aspx
  • Список/doclib, к которому я обращаюсь
    • http://sp/sites/sr/mylist
  • URL-адрес папок внутри XsltListViewWebPart.
    • http://sp/_layouts/my/application/Detail.aspx?RootFolder=...
  • URL-адрес папок в том виде, в каком они должны быть
    • http://sp/sites/sr/_layouts/my/application/Detail.aspx?RootFolder=...

Вот и кикер:При использовании СписокViewWebPart, все работает как надо!Поэтому вместо XsltListViewWebPart выше я просто использую ListViewWebpart - и папки работают, контекст учитывается, папки имеют URL-адрес, который я хочу (http://../sites/sr/_layouts/../../..Detail.aspx?RootFolder=...

Я попробовал установить веб-идентификатор Свойство XsltListViewWebpart надеется, что оно установит контекст, но безуспешно.Теперь я думаю, что либо я настроил его неправильно, либо в новом SharePoint 2010 XsltListViewWebPart есть ошибка, поскольку тот же код работает для ListViewWebPart на той же странице приложения.

Я надеюсь, что кто-нибудь сможет проверить эту проблему.

Это было полезно?

Решение

Короче говоря, просто не используйте XsltListWebPart на страницах приложений.

И вот несколько кратких объяснений:

XsltListViewWebPart и другие веб-части OOTB SharePoint (особенно сложные), очевидно, просто не должны работать в среде страниц приложений.Другими словами, они там не тестировались и поэтому их работоспособность не гарантируется.

Косвенно это можно подтвердить, прочитав хотя бы следующие статьи MSDN:

..Страница сайта также может размещать такие функции, как динамические веб -части и зоны веб -части.Страницы приложений не могут этого делать.

Также это указано в курсе MS 10232.

В частности, что касается XsltListViewWebPart (XLV), я слышал о многочисленных проблемах при его использовании на странице приложения и с некоторыми из них столкнулся сам.

Например, если вы настроите XLV с помощью свойства XslLink, XLV не сможет кэшировать файл xsl, и, как следствие, ECB и соответствующие кнопки на ленте не будут работать.В журналах вы получите следующее сообщение об исключении:

Попытка использовать объект, который перестал существовать.

Кроме того, вы можете проверить следующий вопрос, чтобы узнать еще один пример проблем с веб-частью OOTB на странице приложения (на этот раз ListViewWebPart):

Другие советы

Во-первых, я думаю, Андрей попал в самую точку.Кроме того, вы можете попробовать использовать Элемент управления ListViewByQuery на странице приложения, если вы ищете простую табличную структуру данных (т. е.список).Microsoft делает это на странице состояния рабочего процесса OOB (т. е._layouts/wrkstat.aspx) для отображения задач.

Я не пробовал его с меню ECB и тому подобным, но использовал его для списков данных только для чтения.Поскольку похоже, что вы используете его для библиотеки документов с папками, я не уверен, что он работает правильно без большого количества кода для правильной работы папок, сортировки и разбиения на страницы.Возможно, стоит попробовать, хотя я бы не стал тратить на это много времени, поскольку страница сайта, вероятно, является лучшим способом использования меньшего количества пользовательского кода.

Если вы используете ListViewByQuery, обязательно просмотрите эти ссылки на пейджинг и т. д.:

Лицензировано под: CC-BY-SA с атрибуция
Не связан с sharepoint.stackexchange
scroll top