web-dev-qa-db-ja.com

エラーを修正する方法:サーバーから受信したメッセージを解析できませんでした

AJAXを使用するSharePointソリューションがあります。これをトリガーするボタンは、更新パネル内にあります。

私たちが行うことの1つは、MS Word文書を生成し、それをクライアントで開いて印刷できるようにすることです。

ドキュメントをクライアントに送信するコードは次のようになります。

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

発生しているエラーは次のとおりです。

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

最初にドキュメントをSharepointに保存してから、Sharepointから開くこともできますが、これは行わない方がよいでしょう。

16
Shiraz Bhaiji

このコードを実行させるアクションは、AJAX呼び出しではなく、ポストバックイベントでなければなりません。

これは、AJAXリクエストの処理方法の性質によるものです。

23
Mitchel Sellers

Updatepanel内にボタンがある場合、これが原因である可能性があります。ボタンを移動したくない場合は、updatepanelのボタンのトリガー、ポストバックトリガーを追加します。

34
MauricioMCP

ボタンは更新パネルの外に置いてください。その後、正常に動作します。

6
Madhu

次のように、ページロードにスクリプトマネージャを追加してみてください。

((ScriptManager)Master.FindControl("ScriptManager1")).RegisterPostBackControl(btnExport);
4
Manick

次のようにボタンを設定して、完全なポストバックを実行します。

 <Triggers>
<asp:PostBackTrigger ControlID="PrintButton" />
</Triggers>
2
Masoumeh Karvar

Asp:UpdatePanelコントロール内にasp:Tableコントロールがありました。テーブルにはいくつかの静的行があり、いくつかの行はポストバックイベント中に追加されました。

このエラーは、テーブルの行と列に静的IDがなかったために発生しました。したがって、IDはポストバックごとに変更され、これによりテーブルのViewStateの復元で問題が発生します。

このエラーを停止するには、テーブルのViewStateを無効にしました。EnableViewState= "false"

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

1

ボタンをクリックすると、このタイプの処理に使用する可能性のあるファイルをストリーミングできる別のページにリダイレクトされます。多くのサイトでdocument.aspxページを使用してから、クエリ文字列を介してドキュメントIDを渡し、そこからファイルをストリーミングしています。

あなたの例では、基本的に、すでに表示されているページのヘッダーを変更しようとしていますが、これは許可されていません

1
Anthony Shaw

私にとって問題は、グリッドビューのテンプレート列のコントロールIDの重複でした。コントロールの名前をグリッド全体で一意に変更すると、問題は解消しました。

1
Dave de Jong

ボタンの周りにある更新パネルを外したところ、問題なく動作しました。

0
Daya

私はこれに数時間苦労しました。 Webフォームでajaxリクエストを行うCode-Behindファイルが機能せず、UpdatePanelを使用した結果、迷惑なエラーが発生し、解決策を見つけることができませんでした。最後に私はうまくいく解決策を見つけました!

  • プロジェクトのどこかに.ashx(汎用ハンドラー)ファイル。私はトップレベルのサービスフォルダー内に自分を作成しました:Services\EventsHandler.ashx。これを行うと、.ashx.ashx.csファイル。
  • ashx.csファイルには、すべてのコードを配置できるProcessRequestメソッドがあります。
  • このメソッドを呼び出して、JavaScriptファイルで次のようなことを行うことができます。

    $('#MyButton').click(function () {
        var zipCode = $('#FBZipBox').val();
    
        $.getJSON('/Services/EventsHandler.ashx?zip=' + zipCode, function (data) {
            var items = [];
            $.each(data.Results, function (key, item) {
            items.Push('<span>item.Date</span>');
        });
    }).complete(function () {
        // More Logic
    });
    return false;});
    
  • ashx.csファイルを使用して、クエリパラメータにアクセスできます。

    var category = context.Request.QueryString ["zipCode"];

  • その後、次を使用して結果を返すことができます。

    context.Response.Write(yourResponseString);

0
Colin