2009-10-12 14 views
11

Abbiamo una soluzione Sharepoint che utilizza AJAX. Il pulsante che attiva questo è all'interno di un pannello di aggiornamento.Come correggere l'errore: il messaggio ricevuto dal server non può essere analizzato

Una delle cose che facciamo è generare un documento MS Word, che viene quindi aperto sul client in modo che possa essere stampato.

Il codice che invia il documento per il cliente si presenta così:

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

L'errore che stiamo ottenendo è:

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'.

potremmo risparmiare il documento in Sharepoint prima, e quindi aprirlo da Sharepoint, ma preferiremmo non farlo.

risposta

17

L'azione che causa l'esecuzione di questo codice DEVE essere un evento postback e non una chiamata AJAX.

Ciò è dovuto alla natura del modo in cui le richieste AJAX vengono elaborate.

1

Dal clic del pulsante, reindirizzare a un'altra pagina in cui è possibile eseguire lo streaming di qualsiasi file con cui si desideri eseguire questo tipo di operazioni. Usiamo una pagina document.aspx in molti dei nostri siti e poi passiamo un documento id tramite querystring e lo streaming del file da lì.

Nel tuo esempio, il gioco è fondamentalmente cercando di cambiare le intestazioni di una pagina che è già stata visualizzata, che non è consentito

+0

'Nel tuo esempio, il gioco è fondamentalmente cercando di cambiare le intestazioni di una pagina che è già stata visualizzata che non è permesso ». È permesso, non c'è bisogno di una pagina separata per questo. –

6

Tenere il pulsante al di fuori del pannello di aggiornamento. Quindi funziona bene.

28

Se il pulsante all'interno di updatepanel potrebbe causare questo, se non si desidera spostarlo, basta aggiungere un trigger per il pulsante sul pannello di aggiornamento, un trigger di postback.

+0

Bella risposta. Il mio problema è risolto. Grazie per il tuo suggerimento –

+0

Anche il mio problema è risolto, grazie mille !! – MBahamondes

0

Ho rimosso il pannello di aggiornamento attorno al pulsante e ha funzionato correttamente.

+0

Esiste già una soluzione a questa domanda che non richiede modifiche architettoniche significative all'applicazione. –

1

Per me il problema era l'ID di controllo duplicato nelle colonne modello di una vista griglia. Una volta che ho rinominato i controlli per essere unici a livello di griglia, il problema è scomparso!

1

Prova ad aggiungere script manager nel caricamento della pagina, in questo modo:

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

ho avuto un asp: controllo Table all'interno di un asp: controllo UpdatePanel. La tabella contiene alcune righe statiche e alcune righe sono state aggiunte durante l'evento Postback .

Questo errore si è verificato perché le righe e le colonne della tabella non hanno ID statici. Quindi gli ID sono cambiati a ogni postback e questo causa problemi con il ripristino di ViewState per la tabella.

per fermare questo errore che ViewState disabilitata per la tavola: EnableViewState = "false"

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

Problemi correlati