3

私のコードでは、JavaScriptを使用しwindow.open()てASPXページでイベントを発生させています。Page_Load()このページのイベントでファイルを出力しています:

Response.Clear();
Response.ClearContent();
Response.ClearHeaders();
Response.Charset = "";
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment;filename=\"" + filename + "\";");
outputStream.WriteTo(Response.OutputStream);
outputStream.Flush();
outputStream.Close();
Response.Flush();
Response.Close();

その後、このポップアップウィンドウを閉じたいと思います。しかし、応答タイプを変更したためwindow.close()、JavaScriptで実行できません。ユーザーに提供されるファイルに追加されるだけです。このスレッドは、私の問題を解決するために私が見つけた最も適切なソースです。

エクスポート後にウィンドウを閉じてExcelに

しかし、与えられた答えは私を助けないので、私は基本的に立ち往生しています。手動でウィンドウを閉じるようにユーザーに指示したくありません。私が目指していることを達成する方法を知っていますか?

4

4 に答える 4

0

あなたは要点を逃しています。ポップアップを閉じるには、スクリプト マネージャーを使用してこれを行う必要がありUploadますUpdatePanel。したがって、次のようにスクリプトを登録します。

ScriptManager.RegisterStartupScript(UpdatePanelObject, UpdatePanelObject.GetType(), "scripname","your  script here", true);
于 2013-04-09T21:09:07.417 に答える
0

AJAX ページからファイルをアップロードできます。あなたがする必要があるのは、コード ビハインドでコントロールの ID を Update Panel Post back トリガーに追加することです。これにはポストバックが必要です。コントロールが同じページにある場合、問題はありません。

ただし、ポストバックを必要とするボタンまたは別の Web コントロールを持つユーザー コントロールを使用する場合は、USer コントロールのパブリック プロパティを介してこのコントロールの ID を公開し、それを含むページでこの ID を取得して、それをポストバックトリガー。

于 2009-03-12T17:23:14.440 に答える
0

私が過去に使用したオプションの 1 つは、ダウンロード リクエストをポップアップ ウィンドウではなく非表示の iframe に送信することでした。

var Utils = Utils || {};
Utils.download = function(url) {
    var iframe = $("<iframe/>").hide().appendTo("body").load(function() {
        iframe.remove();
    }).attr("src", url);
};

そうすれば、表示されるポップアップ ウィンドウについて心配する必要がなくなります。唯一の欠点は、ファイルのダウンロードが失敗した場合、ユーザーは何が問題なのかまったくヒントを得られないことです (あなたの場合、エラーメッセージがそのままのポップアップウィンドウが表示されます)。この問題を回避するには、ファイルを返す代わりに、読み込み時に何らかのアラートを発生させてユーザーにエラーを通知する JavaScript を含むページを返します。

また、メモリからiframe.remove()、iframe の読み込み時の呼び出しはすべての (任意の?) ブラウザーで機能するわけではありませんが、結局のところ、最悪の場合は単に空の iframe の束が dom の最後に接続されているため、問題が発生することはありません (問題が発生した場合は、新しいものを作成するのではなく、常に同じものを再利用し続けることができます)。

于 2012-10-08T06:17:06.813 に答える