Pregunta

Estoy agregando uno muy simple XsltListViewWebPart a una página de aplicación.Al igual que:

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

Todo funciona bien (puedo descargar archivos, crear carpetas, elegir diferentes vistas, etc.), pero los enlaces de las carpetas tienen el href incorrecto:¡siempre apuntan a la web raíz!

Vea estos ejemplos:enter image description here

Como puede ver, el documento se vincula correctamente a ../sites/sr/doclib/mydocument.docx, sin embargo, al mirar las carpetas, olvidan el contexto en el que se encuentran actualmente (están en http://../sites/sr/_layouts/../../..Detail.aspx?RootFolder=..., la parte importante es /sites/sr/).Intentan ir a la carpeta _layouts en el contexto de la colección de sitios raíz, como se muestra arriba: http://../_layouts/../../..Detail.aspx?RootFolder=...

O nuevamente resumido:

  • La ubicación de la página de la aplicación:
    • http://sp/sites/sr/_layouts/my/application/Detail.aspx
  • La lista/doclib a la que estoy accediendo
    • http://sp/sites/sr/mylist
  • La URL de las carpetas dentro de XsltListViewWebPart
    • http://sp/_layouts/my/application/Detail.aspx?RootFolder=...
  • La URL de las carpetas como deberían ser.
    • http://sp/sites/sr/_layouts/my/application/Detail.aspx?RootFolder=...

Aquí viene el truco:Cuando se utiliza un ListViewWebPart, ¡Todo funciona como debería!Entonces, en lugar del XsltListViewWebPart anterior, solo uso un ListViewWebpart, y las carpetas funcionan, el contexto se tiene en cuenta y las carpetas tienen la URL que quiero (http://../sites/sr/_layouts/../../..Detail.aspx?RootFolder=...

Intenté configurar el ID web Propiedad en XsltListViewWebpart con la esperanza de establecer el contexto, pero no hubo suerte.Ahora estoy pensando que lo configuro incorrectamente o que el nuevo XsltListViewWebPart de SharePoint 2010 tiene un error, ya que el mismo código funciona para un ListViewWebPart en la misma página de la aplicación.

Espero que alguien pueda verificar este problema.

¿Fue útil?

Solución

En resumen, simplemente no utilice XsltListWebPart en las páginas de la aplicación.

Y aquí hay algunas explicaciones resumidas:

XsltListViewWebPart y otros elementos web OOTB SharePoint (especialmente los complejos), aparentemente simplemente no deberían funcionar en el entorno de páginas de aplicaciones.Es decir, no fueron probados allí y, por tanto, no se garantiza su funcionamiento.

Esto se puede confirmar indirectamente leyendo al menos los siguientes artículos de MSDN:

..Una página del sitio también puede alojar características como piezas web dinámicas y zonas de piezas web.Las páginas de aplicaciones no pueden hacer estas cosas.

También se indica en el curso de MS. 10232.

Con respecto a XsltListViewWebPart (XLV) en particular, escuché de múltiples problemas al usarlo desde la página de la aplicación y experimenté algunos de ellos yo mismo.

Por ejemplo, si personaliza XLV usando la propiedad XslLink, XLV no podrá almacenar en caché el archivo xsl y, como consecuencia, ECB y los botones correspondientes en Ribbon no funcionarán.En los registros, recibirá el siguiente mensaje de excepción:

Intentó utilizar un objeto que ha dejado de existir.

Además, puede consultar la siguiente pregunta para ver otro ejemplo de problemas con el elemento web OOTB en la página de la aplicación (ListViewWebPart, esta vez):

Otros consejos

Primero, creo que Andrey dio en el clavo.Además, podría intentar utilizar el control ListViewByQuery en la página de una aplicación si busca un diseño tabular simple de datos (es decir,una lista).Microsoft hace esto en la página de estado del flujo de trabajo OOB (es decir,_layouts/wrkstat.aspx) para mostrar las tareas.

No lo probé con menús del BCE y demás, pero lo usé para listas de datos de solo lectura.Dado que parece que lo está utilizando para una biblioteca de documentos con carpetas, no estoy seguro de que funcione correctamente sin mucho código para que las carpetas, la clasificación y la paginación funcionen correctamente.Podría valer la pena intentarlo, aunque no le dedicaría mucho tiempo, ya que la página del sitio es probablemente una mejor manera de hacerlo con menos código personalizado.

Si opta por ListViewByQuery, asegúrese de revisar estos enlaces para paginación, etc.:

Licenciado bajo: CC-BY-SA con atribución
scroll top