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から開くこともできますが、これは行わない方がよいでしょう。
このコードを実行させるアクションは、AJAX呼び出しではなく、ポストバックイベントでなければなりません。
これは、AJAXリクエストの処理方法の性質によるものです。
Updatepanel内にボタンがある場合、これが原因である可能性があります。ボタンを移動したくない場合は、updatepanelのボタンのトリガー、ポストバックトリガーを追加します。
ボタンは更新パネルの外に置いてください。その後、正常に動作します。
次のように、ページロードにスクリプトマネージャを追加してみてください。
((ScriptManager)Master.FindControl("ScriptManager1")).RegisterPostBackControl(btnExport);
次のようにボタンを設定して、完全なポストバックを実行します。
<Triggers>
<asp:PostBackTrigger ControlID="PrintButton" />
</Triggers>
Asp:UpdatePanelコントロール内にasp:Tableコントロールがありました。テーブルにはいくつかの静的行があり、いくつかの行はポストバックイベント中に追加されました。
このエラーは、テーブルの行と列に静的IDがなかったために発生しました。したがって、IDはポストバックごとに変更され、これによりテーブルのViewStateの復元で問題が発生します。
このエラーを停止するには、テーブルのViewStateを無効にしました。EnableViewState= "false"
<asp:Table ID="PageContentTable" runat="server" ... EnableViewState="false">
ボタンをクリックすると、このタイプの処理に使用する可能性のあるファイルをストリーミングできる別のページにリダイレクトされます。多くのサイトでdocument.aspxページを使用してから、クエリ文字列を介してドキュメントIDを渡し、そこからファイルをストリーミングしています。
あなたの例では、基本的に、すでに表示されているページのヘッダーを変更しようとしていますが、これは許可されていません
私にとって問題は、グリッドビューのテンプレート列のコントロールIDの重複でした。コントロールの名前をグリッド全体で一意に変更すると、問題は解消しました。
ボタンの周りにある更新パネルを外したところ、問題なく動作しました。
私はこれに数時間苦労しました。 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);