2009-10-12 41 views
11

Tenemos una solución Sharepoint que usa AJAX. El botón que activa esto está dentro de un panel de actualización.Cómo reparar el error: El mensaje recibido del servidor no se pudo analizar

Una de las cosas que hacemos es generar un documento de MS Word, que luego se abre en el cliente para que se pueda imprimir.

El código que envía el documento al cliente tiene el siguiente aspecto:

void OpenFileInWord(byte[] data) 
    { 
     Response.Clear(); 
     Response.AddHeader("Content-Type", "application/msword"); 
     Response.BinaryWrite(data); 
     Response.Flush(); 
     Response.End(); 
    } 

El error que está recibiendo es:

Message: Sys.WebForms.PageRequestManagerParserErrorException: The message received from the server could not be parsed. Common causes for this error are when the response is modified by calls to Response.Write(), response filters, HttpModules, or server trace is enabled. Details: Error parsing near '<?mso-application pr'.

podríamos salvar el documento en Sharepoint en primer lugar, y luego abrirlo desde Sharepoint, pero preferiríamos no hacer esto.

Respuesta

17

La acción que causa la ejecución de este código DEBE ser un evento de devolución de datos, y no una llamada AJAX.

Esto se debe a la naturaleza de la forma en que se procesan las solicitudes AJAX.

1

En su botón, haga clic en, redirigir a otra página que puede transmitir cualquier archivo con el que desee hacer este tipo de cosas. Usamos una página document.aspx en muchos de nuestros sitios y luego pasamos una identificación de documento a través de querystring y transmitimos el archivo desde allí.

En su ejemplo, que está básicamente tratando de cambiar los encabezados de una página que ya ha sido representada que no está permitido

+0

'En su ejemplo, que está básicamente tratando de cambiar los encabezados de una página que ya ha sido representada la cual no está permitido'. Está permitido, no hay necesidad de una página separada para él. –

6

Mantenga su botón fuera del panel de actualización. Entonces funciona bien.

28

Si tiene el botón dentro del panel de actualización esto puede causar esto, si no quiere moverlo, simplemente agregue un desencadenador para el botón en el panel de actualización, un desencadenador de devolución de datos.

+0

Buena respuesta. Mi problema está resuelto. Gracias por tu sugerencia. –

+0

Mi problema también está resuelto, ¡muchas gracias! – MBahamondes

0

Quité el panel de actualización alrededor del botón y funcionó bien.

+0

Ya existe una solución a esta pregunta que no requiere ningún cambio arquitectónico significativo en la aplicación. –

1

Para mí, el problema eran los ID de control duplicados en columnas de plantilla de una vista de cuadrícula. Una vez que cambié el nombre de los controles para que fueran únicos en toda la red, ¡el problema desapareció!

1

Trate de añadir gestor de secuencia de comandos en su carga de la página, así:

((ScriptManager)Master.FindControl("ScriptManager1")).RegisterPostBackControl(btnExport); 
1

que tenían un ASP: Control de la tabla dentro de un asp: control UpdatePanel. La tabla tenía algunas filas estáticas y se agregaron algunas filas durante un evento de devolución.

Este error se produjo porque las filas y las columnas de la tabla no tenían ID estáticas. Por lo tanto, los ID cambiados en cada devolución de datos causan problemas al restaurar ViewState para la tabla.

Para detener este error me ViewState discapacitados para la tabla: EnableViewState = "false"

<asp:Table ID="PageContentTable" runat="server" ... EnableViewState="false">

Cuestiones relacionadas