web-dev-qa-db-fra.com

Erreur ASP.NET Ajax: Sys.WebForms.PageRequestManagerParserErrorException

Mon site Web me donnait des erreurs intermittentes lorsque j'essayais d'exécuter des activités any Ajax. Le message que je reçois est

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 '

<!DOCTYPE html P'.

C'est donc évidemment une sorte de délai d'attente du serveur ou le serveur vient de retourner des ordures endommagées. Malheureusement, cela ne se produit généralement pas toujours

23
Phil Bennett

Eilon Lipton a publié un excellent article sur son blog. Il contient de nombreux conseils pour éviter cette erreur:

Sys.WebForms.PageRequestManagerParserErrorException - qu'est-ce que c'est et comment l'éviter

Lire les commentaires aussi. Il y a un commentaire de quelqu'un qui a le même problème: "Je l'ai résolu en modifiant le temps d'inactivité du serveur de mon pool d'applications sur IIS. Il n'était que 5, je l'ai donc incrémenté et fonctionne maintenant."

"Le contrôle UpdatePanel utilise des publications asynchrones pour contrôler les parties de la page qui seront rendues. Pour ce faire, il utilise tout un ensemble de JavaScript sur le client et un ensemble de C # sur le serveur.

Les publications asynchrones sont exactement les mêmes que les publications normales, à l'exception d'une chose importante: le rendu. Les publications asynchrones suivent les mêmes événements de cycles de vie que les pages classiques (c'est une question que l'on me pose souvent).

Ce n'est qu'à la phase de rendu que les choses changent. Nous capturons uniquement le rendu des UpdatePanels qui nous intéressent et le transmettons au client en utilisant un format spécial. En outre, nous envoyons d'autres informations, telles que comme le titre de la page, les valeurs de formulaire masquées, l’URL d’action de formulaire et les listes de scripts. " _

Les raisons les plus courantes de cette erreur:

  1. Appels à Response.Write ():
  2. Filtres de réponse
  3. HttpModules
  4. La trace du serveur est activée
  5. Appels vers Server.Transfer ()
22
splattne

Il y a probablement une erreur survenue après retour. Dans ce cas, vous pouvez afficher les détails de l'erreur en ajoutant un PostBackTrigger à votre updatepanel et en référençant le bouton à l'origine du problème:

    <asp:updatepanel ID="updatepanel1" runat="server">
        <Triggers>
            <asp:PostBackTrigger ControlID="button1" /> 
        </Triggers>
        <ContentTemplate>

        </ContentTemplate>
    </asp:updatepanel>
9
CSharper

Cela m’arrive à moi et aucune des causes énumérées dans la réponse ne s’applique. Je n'ai pas trouvé la racine du problème avant d'avoir désactivé mon AJAX. Découvert que le code enregistrait un objet dans ViewState contenant un objet non sérialisable. J'ai rendu l'objet sérialisable et il a recommencé à fonctionner.

4
user1097991

Cela peut sembler un peu compliqué, mais cela a résolu le problème pour moi. Je n'avais aucune des raisons courantes de l'erreur, je me suis donc contenté de mettre ce pansement dans le chargement de page:

if (Session.SessionID == "")
{
    Page.Session.Add("SessionID", Session.SessionID);
}
1
rahkim

Le changement de la piscine d'applications d'INTEGRATED à asp.net classic a résolu le problème pour moi.

1
Alexander

J'ai résolu le même problème en supprimant le Content-Type: dans la section Custom HTTP Headers de l'onglet HTTP Headers dans IIS. Cela cassait l'encodage de la page et cela affectait Ajax en général.

Le Content-Type que j'avais configuré dans IIS définissait le codage sur ISO-8859-1.

1
BrunoSalvino

J'ai finalement résolu ma variante de ce même problème. J'essayais de copier/déplacer une valeur sélectionnée entre 2 zones de liste dans un formulaire Web. Dans mon cas, j'ai dû appeler spécifiquement {listbox} .ClearSelection () avant d'exécuter l'action la deuxième fois.

Il est donc évident que ce problème/message d'erreur peut se produire pour une multitude de raisons.

1
Chuck

J'ai résolu le même problème en supprimant les UpdatePanels imbriqués par erreur.

1
Anuradha

Dans notre cas, le problème a été causé par un proxy de réécriture en cours de route. La réécriture a modifié le contenu de la réponse du panneau de mise à jour. Mais cette réponse contient également la taille d'origine. Le mécanisme de réécriture ne peut pas savoir que quelques octets de la réponse contiennent réellement la taille de la réponse d'origine et il devrait également être modifié.

La réponse du panneau de mise à jour commence comme ceci:

1|#||4|30502|updatePanel|pnlUpdate| ...

Le 30502 correspond à la taille originale du contenu mis à jour. Le moteur de réécriture modifie la sortie, mais la taille reste inchangée => exception d'erreur de l'analyseur. 

Je ne vois pas comment résoudre ce problème du côté client. Nous aurions besoin de savoir exactement comment le contenu a été modifié, puis de modifier en quelque sorte la taille de la réponse avant que UpdatePanel ClientScript ne commence à le traiter.

1
mivra

J'ai constaté que mon problème était lié à un caractère nul rendu dans la liaison de données d'un GridView. La longueur attendue de la réponse ne correspond pas à la longueur réelle du texte de la réponse qui a provoqué l'erreur. Une fois que j'ai corrigé les données dans la base de données, je n'ai plus l'erreur. Le correctif ultime consistera à assainir le texte rendu lors de l'événement RowDataBound.

En parcourant la base de données, je ne pouvais pas voir les données incorrectes car SQL Server 2008 n'affiche pas le texte si le caractère nul (Char (0)) est dans la chaîne. Dans l'événement RowDataBound de mon GridView, j'ai ajouté du code pour générer une exception pour tout texte contenant des caractères spéciaux. Voici comment j'ai trouvé l'enregistrement qui contenait les caractères nuls.

tl; dr - Vérifie la présence de caractères nuls dans le code HTML rendu.

0
Casey

Sachez également que cela peut être dû à un codage HTML incorrect de ce que vous pouvez rendre à la page par le biais de publications partielles.

0
John

J'ai eu exactement la même erreur.

Pour moi c'était 

<add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

Manquant dans la section httpModules de web.config (application .Net 3.5)

Cette erreur semble être liée à beaucoup de choses différentes.

0
AFract

J'ai aussi eu cette erreur. La solution rapportée par "user1097991" l'a résolue pendant un moment (j'utilisais des objets non sérialisés sur viewstate)

Mais plus tard, l'erreur est revenue à nouveau, maintenant de manière aléatoire. Après quelques recherches, j'ai eu la réponse: l'état de vue devenait trop grand et avait été tronqué. Je désactive certains états de visualisation sur les grilles et les menus et le problème ne s’affiche plus.

0
Gustavo Cardoso