1

全て、

大量のデータを収集するために、実行時間の長いリクエストをいくつか行っているUpdatePanelがあります。戻るのに最大90秒かかる場合があります。

最初のリクエストは、ドキュメントへのリンクとしてレンダリングされたデータを返します。リンクをクリックすると、新しいブラウザウィンドウが開き、URLには、開くドキュメントをシステムに指示するクエリ文字列が含まれます。

クライアントのリンクをレンダリングするときのコードの一部を次に示します。

 HtmlAnchor alink = new HtmlAnchor();
 alink.HRef = "javascript:openDocument('"+ item.Url +"')";   //item.Url;

// here is the JS on the client page
function openDocument(path) {
    window.open(path);
 }

したがって、ユーザーがリンクをクリックすると、ポップアップウィンドウが開きます。問題は、ポップアップウィンドウがリクエストを送信する前に、UpdatePanelがリクエストを完了するまで待機することです。

ポップアップからURLをコピーし、新しいブラウザを開いてから、そのURLを新しいブラウザに貼り付けると、期待どおりにドキュメントが開きます。

これにより、UpdatePanelがポップアップウィンドウの要求を何らかの形でブロックしていると私は信じています。ユーザーが最初の結果からドキュメントを開くことができるようになる前に、UpdatePanelのAJAXリクエストが完了するまでユーザーを待たせたくありません。

この閉塞を回避するにはどうすればよいですか?UpdatePanelのContentAreaの外にボタンを作成してクリックをシミュレートしようとしましたが、そのようなものも機能しません。

誰かがこれについて考えを持っていますか?

前もって感謝します!

4

1 に答える 1

1

その理由は、ページがセッション状態を使用しているため、すべてのリクエストが同じセッションキーを共有する他のすべてをブロックするためです。

ページがセッションに書き込まない場合は、IReadOnlySessionState属性を適用して、非読み取り専用リクエストがある場合にのみブロックし、すべての同時リクエストが読み取り専用セッションを使用している場合はブロックしないようにすることができます。

public class YourPage: Page, IReadOnlySessionState { ... }
于 2012-10-30T16:55:26.473 に答える