Nous avons une solution Sharepoint qui utilise AJAX. Le bouton qui le déclenche se trouve dans un panneau de mise à jour.
L’une des choses que nous faisons est de générer un document MS Word, qui est ensuite ouvert sur le client afin qu’il puisse être imprimé.
Le code qui envoie le document au client ressemble à ceci:
void OpenFileInWord(byte[] data)
{
Response.Clear();
Response.AddHeader("Content-Type", "application/msword");
Response.BinaryWrite(data);
Response.Flush();
Response.End();
}
L'erreur que nous obtenons est la suivante:
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'.
Nous pourrions d’abord enregistrer le document dans Sharepoint, puis l’ouvrir à partir de Sharepoint, mais nous préférerions ne pas le faire.
L'action qui provoque l'exécution de ce code DOIT être un événement de publication et non un appel AJAX.
Cela est dû à la nature du traitement des demandes AJAX.
Si vous avez le bouton dans updatepanel qui peut être la cause de ceci, si vous ne voulez pas le déplacer, ajoutez simplement un déclencheur pour le bouton sur le updatepanel, un déclencheur de publication.
Gardez votre bouton en dehors du panneau de mise à jour. Ensuite ça marche bien.
Essayez d’ajouter un gestionnaire de script à votre chargement de page, comme ceci:
((ScriptManager)Master.FindControl("ScriptManager1")).RegisterPostBackControl(btnExport);
Configurez votre bouton pour créer une publication complète comme ceci:
<Triggers>
<asp:PostBackTrigger ControlID="PrintButton" />
</Triggers>
J'avais un contrôle asp: Table dans un contrôle asp: UpdatePanel. La table contenait des lignes statiques et certaines lignes ont été ajoutées au cours de Un événement Postback.
Cette erreur est survenue car les lignes et les colonnes de la table n'avaient pas D'identifiants statiques. Ainsi, les ID ont changé à chaque publication et cela cause Des problèmes pour restaurer ViewState pour la table.
Pour arrêter cette erreur, j'ai désactivé ViewState pour la table: EnableViewState = "false"
<asp:Table ID="PageContentTable" runat="server" ... EnableViewState="false">
Cliquez sur votre bouton, redirigez vers une autre page pouvant diffuser en continu tous les fichiers avec lesquels vous voudrez peut-être faire ce genre de choses. Nous utilisons une page document.aspx dans bon nombre de nos sites, puis passons un identifiant de document via une chaîne de requête et transmettent le fichier à partir de là.
Dans votre exemple, vous essayez essentiellement de modifier les en-têtes d'une page déjà affichée qui n'est pas autorisée.
Pour moi, le problème était celui des identifiants de contrôle en double dans les colonnes de modèle d'une vue en grille. Une fois que j'ai renommé les contrôles pour qu'ils soient uniques à l'échelle de la grille, le problème a disparu!
J'ai enlevé le panneau de mise à jour autour du bouton et cela a bien fonctionné.