25

Ajax アクティビティを実行しようとすると、Web サイトで断続的なエラーが発生します。私が受け取るメッセージは

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

したがって、明らかにある種のサーバータイムアウトか、サーバーが破損したガベージを返すだけです。これは一般的に、残念ながら常にではありませんが、起こります

4

15 に答える 15

23

Eilon Lipton による優れたブログ エントリがあります。このエラーを回避する方法に関する多くのヒントが含まれています。

Sys.WebForms.PageRequestManagerParserErrorException - 概要と回避方法

コメントも読んでください。同じ問題を抱えている人のコメントがあります

「UpdatePanel コントロールは、非同期ポストバックを使用して、ページのどの部分がレンダリングされるかを制御します。これは、クライアントで大量の JavaScript を使用し、サーバーで多数の C# を使用して行います。

非同期ポストバックは、レンダリングという 1 つの重要な点を除いて、通常のポストバックとまったく同じです。非同期ポストバックは、通常のページと同じライフ サイクル イベントを通過します (これはよく聞かれる質問です)。

レンダリング段階でのみ、状況が異なります。気になる UpdatePanels のみのレンダリングをキャプチャし、特別な形式を使用してクライアントに送信します。さらに、ページ タイトル、非表示のフォーム値、フォーム アクション URL、スクリプトのリストなど、その他の情報も送信します。」

そのエラーの最も一般的な理由:

  1. Response.Write() の呼び出し:
  2. 応答フィルタ
  3. Httpモジュール
  4. サーバー トレースが有効になっています
  5. Server.Transfer() の呼び出し
于 2008-11-14T13:50:29.897 に答える
9

おそらく、ポストバックでエラーが発生しています。この場合、PostBackTriggerをupdatepanelに追加し、問題の原因となっているボタンを参照することで、エラーの詳細を表示できます。

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

        </ContentTemplate>
    </asp:updatepanel>
于 2011-07-19T13:14:24.700 に答える
4

私はこれを経験しましたが、回答のリストにある原因はどれも適用されませんでした。AJAX を完全に無効にするまで、問題の原因を特定できませんでした。コードが、シリアル化できないオブジェクトを含む ViewState にオブジェクトを保存していたことを発見しました。オブジェクトをシリアル化可能にすると、再び機能し始めました。

于 2012-03-09T22:54:05.373 に答える
1

私はついにこの同じ問題の私の変種を解決しました。Webフォームの2つのリストボックス間で選択した値をコピー/移動しようとしました。私の場合、2回目のアクションを実行する前に、特に{listbox} .ClearSelection()を呼び出す必要がありました。

したがって、明らかにこの問題/エラーメッセージはさまざまな理由で発生する可能性があります。

于 2012-07-31T22:14:40.697 に答える
1

アプリプールをINTEGRATEDからasp.netclassicに変更すると、問題が解決しました。

于 2012-08-19T10:42:42.420 に答える
1

問題: ページをリダイレクトするときに Sys.WebForms.PageRequestManagerParserErrorException が発生します。aspxAjax の UpdatePanel 内でボタンをクリックするとします。

解決:

  1. 更新パネルが使用している aspx ページに「GoTo」ボタンを追加し、更新パネルの外に追加します

  2. コードで、登録したばかりのユーザーIDをセッション変数に割り当てます。たとえばSession["UseridJustregistered"]=Id、DBまたはUsernameFieldから

  3. Respose.Redirect("regSucces.aspx?urlid='" + Session["UseridJustregistered"] + "'");

  4. Session["UseridJustregistered"]が null かどうかを確認する

これは、私たちの問題を解決できる古い古典的な ASP の方法です。Microsoft が解決策を見つけるまでには、この方法で取り組むことができます。

于 2010-08-04T08:48:31.100 に答える
1

私たちの場合、問題は途中で書き換えられたプロキシによって引き起こされました。書き換えにより、更新パネルの応答の内容が変更されました。ただし、この応答には元のサイズも含まれています。書き換えメカニズムは、応答の数バイトに実際に元の応答サイズが含まれていることを認識できず、それも変更する必要があります。

更新パネルの応答は次のように始まります。

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

30502は、更新中のコンテンツの元のサイズです。書き換えエンジンは出力を変更しますが、サイズは変更されません => パーサー エラー例外。

クライアント側からこの問題を解決する方法がわかりません。UpdatePanel ClientScript がコンテンツの処理を開始する前に、コンテンツがどのように変更されたかを正確に把握し、何らかの方法で応答のサイズを変更する必要があります。

于 2015-05-28T18:53:44.710 に答える
1

これは少しハックかもしれませんが、私にとっては問題を解決しました。エラーの一般的な理由は何もなかったので、ページの読み込みにこのバンドエイドを挿入しました。

if (Session.SessionID == "")
{
    Page.Session.Add("SessionID", Session.SessionID);
}
于 2010-05-21T17:17:39.847 に答える
1

のタブのセクションのContent-Type:フォームを削除して、このまったく同じ問題を解決しました。これはページのエンコーディングを壊し、どういうわけか Ajax 全般に影響を与えました。Custom HTTP HeadersHTTP HeadersIIS

Content-Typeで構成したのは、エンコーディングを に設定していましIISISO-8859-1

于 2010-02-09T19:27:30.197 に答える
1

誤ってネストされた UpdatePanels を削除することで、この同じ問題を解決しました。

于 2011-12-23T16:35:18.070 に答える
0

私もこのエラーが発生しました。「user1097991」によって報告された解決策はしばらくの間それを解決しました(私はビューステートでシリアル化されていないオブジェクトを使用していました)

しかし、後でエラーが再び返され、現在はランダムに発生しています。いくつか検索した後、私は答えを得ました:ビューステートが大きくなりすぎて切り捨てられました。グリッドとメニューの一部のビューステートを無効にしましたが、問題は再発しません。

于 2012-09-19T00:55:23.537 に答える
0

まったく同じエラーが発生しました。

私にとってはそうでした

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

web.config の httpModules セクションにない (.Net 3.5 アプリ)

このエラーは、さまざまなことが関係しているようです。

于 2015-04-14T13:45:31.653 に答える
0

私の問題は、GridView のデータバインディングでレンダリングされる nul 文字に関連していることがわかりました。応答の予想される長さが応答テキストの実際の長さと一致しなかったため、エラーがスローされました。データベースのデータを修正したら、エラーは発生しなくなりました。最終的な修正は、RowDataBound イベント中にレンダリングされるテキストをサニタイズすることです。

SQL Server 2008 では、文字列にヌル文字 (Char(0)) が含まれているとテキストが表示されないため、データベースを調べたところ、不正なデータは表示されませんでした。GridView の RowDataBound イベントに、特殊文字を含むテキストに対して例外をスローするコードを追加しました。これが、ヌル文字を含むレコードを見つけた方法です。

tl;dr - レンダリングされた html でヌル文字をチェックします。

于 2012-11-14T16:01:17.587 に答える
0

ScriptMode を「Release」に更新します。

<asp:ScriptManager ID="ScriptManager" runat="server" ScriptMode="Release"></asp:ScriptManager>
于 2020-07-14T10:18:55.413 に答える
0

これは、部分的なポストバックを介してページにレンダリングする内容が適切に html エンコードされていないことが原因である可能性があることにも注意してください。

于 2012-12-19T21:29:33.580 に答える