web-dev-qa-db-ja.com

ASP.NET Ajaxエラー:Sys.WebForms.PageRequestManagerParserErrorException

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

そのため、明らかに何らかのサーバータイムアウトまたはサーバーが単に破損したゴミを返すだけです。これは、一般的に、残念ながら常にではなく、幸福です

23
Phil Bennett

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

Sys.WebForms.PageRequestManagerParserErrorException-その内容と回避方法

コメントも読んでください。同じ問題を持つ誰かのコメントがあります: "IIS上のアプリプールのサーバーアイドル時間を変更して解決しました。私はそれをインクリメントし、現在動作します。」

"UpdatePanelコントロールは非同期ポストバックを使用して、ページのどの部分をレンダリングするかを制御します。これは、クライアント上のJavaScript全体とサーバー上のC#全体を使用して行います。

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

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

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

  1. Response.Write()の呼び出し:
  2. 応答フィルター
  3. HttpModules
  4. サーバートレースが有効になっています
  5. Server.Transfer()の呼び出し
22
splattne

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

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

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

私はこれを私に起こさせました、そして、答えのリストの原因のどれも適用されませんでした。 AJAXを完全に無効にするまで、問題の根本を見つけられませんでした。再び働き始めた。

4
user1097991

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

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

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

1
Alexander

IISContent-Type:タブのCustom HTTP HeadersセクションからHTTP Headersセクションを削除して、まったく同じ問題を解決しました。これはページのエンコーディングを壊し、Ajax全般に何らかの影響を及ぼしました。

IISで構成したContent-Typeは、エンコードをISO-8859-1に設定していました。

1
BrunoSalvino

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

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

1
Chuck

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

解決:

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

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

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

  4. _Session["UseridJustregistered"]_がnullかどうかを確認します

これはOLD Classic ASPです。これは問題を解決する方法です。Microsoftがこの方法で解決できる解決策を見つけるまでに。

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

1
Anuradha

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

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

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

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

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

1
mivra

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

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

tl; dr-レンダリングされたhtmlのヌル文字を確認します。

0
Casey

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

0
John

私はまったく同じエラーがありました。

私にとっては

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

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

このエラーは多くのさまざまなことに関連しているようです。

0
AFract

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

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

0
Gustavo Cardoso