2

ある時点でPDFファイルを生成して次のページをロードするASP.NETアプリがあります。これは2つの別々のボタンで簡単に実行できますが、1つのボタンでこれを実行しようとすると非常に困難になります。

両方が同じボタンで起動されると、PDFはダウンロードされますが、ページは読み込まれません。ファイルが送信された後もスレッドをスリープ状態にしましたが、待機しましたが、その後停止しました。

動作させようとしているコードを添付しました。

Response.ContentType = "application/pdf";
Response.AppendHeader("Content-Disposition", "attachment; filename=labels.pdf");
Response.TransmitFile(Server.MapPath("~/"+randomNumber.ToString()+".pdf"));
Server.Transfer("~/createshipment.aspx", true);
4

4 に答える 4

1

サーバーから2つの異なる応答を受け取ることはできませんが、そうしようとしています。

まず、サーバーがPDFを返すようにします。2番目-サーバーがページを返すようにしcreateshipment.aspxます。

これは通信プロトコルに反します。おそらく最良の解決策は、別のユーザー、compentent_techによってすでに提示されています-新しいウィンドウ(javascriptのwindow.open)を開くと、この新しいウィンドウはPDFを返し、同時にメインウィンドウはサーバーに投稿してにリダイレクトされますcreateshipment.aspx

于 2011-12-30T19:38:27.440 に答える
1

つまり、簡単に言うと、「このファイルをダウンロードしていただきありがとうございます」などの次のページに移動して、ダウンロードを開始します。

あなたがすべきことは、ボタンをクリックしてPDFを生成し、それをどこかに保存する必要があります(ディスクまたはDB-アプリのどちらか簡単な方)、新しいファイルの名前/場所(またはDBの主キー)をセッション変数と次のページにリダイレクトします。ここに転送する理由はありません。次に、その次のページで、保存したファイルを指す非表示のiframeを追加する必要があります。

または、ボタンのクリックは、PDFを生成するページを指す非表示のiframeを含む次のページへの単なるリンクである可能性があります。これは少し単純ですが、元のページからPDFを生成するページにパラメーターを渡す必要がある場合はうまく機能しません。

于 2011-12-30T20:09:35.593 に答える
0

これは、server.transferが「...現在のページの実行を終了し、ページの指定されたURLパスを使用して新しいページの実行を開始する」ためです。

最善の策は、PDFを取得するクライアントで新しいウィンドウを開き、ユーザーを次のページに移動するために必要なポストバックを実行することです。

于 2011-12-30T19:27:35.060 に答える
0

私はこれが古いことを知っていますが、私はそれを見ているだけです(自分で同様の情報を探しています)。

これが問題を引き起こしていると推測します。

Response.TransmitFile(Server.MapPath("~/"+randomNumber.ToString()+".pdf"));

パスをランダムに作成されたファイル名ではなく実際のファイルにマップする必要があります-または、いくつかの手順がありませんか?

于 2013-02-07T18:05:01.453 に答える