1

これが私の状況です。

ASP.NET Web フォームにボタンがあります。このボタンは、多くの隠しフィールド (動的に生成される) を持つページを指す新しいブラウザー ウィンドウを作成します。このフォームは、bodys onload イベントで SQL Reporting Services に送信されます。これは正常に機能し、レポートがこの新しいウィンドウに表示されます。

ただし、今でもフォームを SQL レポート サービスに POST したいのですが、Excel スプレッドシートを取り戻したいと思っています。そこで、名前が rs:Format で値が Excel の隠し入力をもう 1 つ追加します。これは機能し、ユーザーは Excel ファイルをダウンロードするオプションを取得します。

ただし、作成された余分なウィンドウで立ち往生しています。どうすればこれを回避できますか? 同じウィンドウで動的フォームと POST を作成しようとしましたが、レポートを生成したページではなく、フォームを含む (空の) ページが表示されます。作成したウィンドウを閉じようとしましたが、JavaScript をどこに置くべきかわかりません。オンロードすると、フォームが送信されずにウィンドウが閉じます。

ここで何をすべきかについてのアイデアはありますか?

編集: ここで行っていたことは、必要な結果を得るための最善の方法ではありませんでした。フォームを投稿する代わりに、WebRequest を使用して Reporting Services から Excel レポートを取得することになったので、結局 2 番目のウィンドウは必要ありませんでした。

4

5 に答える 5

4

ブラウザを閉じないでください。あなたが開いたとしても、それはユーザーのものです。それを閉じると、彼らは怒る可能性があります。ウィンドウの操作が完了したことをユーザーに伝えるページにリダイレクトしてください
そこでは、必要に応じてブラウザーを閉じるのを少し簡単にする (javascript ベースの) リンクを提供できますが、ブラウザー ウィンドウを閉じるのは一般的に非常に簡単です。

于 2008-10-07T23:28:27.873 に答える
2

ところで、ポップアップに有用な出力が含まれていない場合は、フォームをページ内の小さな Iframe に送信することをお勧めします。この方法では、フレームを非表示にできるため、ウィンドウを閉じる必要はありません。

于 2008-10-07T23:39:42.797 に答える
1

ユーザーが Excel ファイルを必要とする場合、別のウィンドウをポップアップする必要はありません。Excel ファイルまたは HTML レポートの選択は、ラジオ ボタンやチェックボックスなどの HTML コントロールで行われると想定しています。そのため、何かを行う前に、そのラジオボタン/チェックボックスの値を JavaScript で確認し、適切なアクションを実行してください。何かのようなもの:

function getReport(excelFormat)
{
    if (excelFormat)
        document.form1.target = '_blank';
    else
        document.form1.target = '_self';
    document.form1.submit();
}
于 2008-10-07T23:31:44.310 に答える
1

ボタンが Ajax リクエストを元のページに戻し、非表示のフィールド値を取得した場合はどうなるでしょうか。次に、javascript を使用して非表示のフィールドを持つページに別のフォームを作成し、ダウンロード オプションを使用して送信できます。要求は application/ms-excel ファイルを返すため、現在のページは更新されませんが、ダウンロードは引き続き行われます。クライアント側の関数から false を返すことで、ボタンのクリックによってポストバックが発生していないことを確認する必要があります。これは、生成されたフォームの投稿が新しい html ページではなくダウンロードになる場合にのみ機能することに注意してください。

<script type="text/javascript">
   function submitReport( button ) {
      PageMethod.SubmitReport(onSuccess,onFailure,{ control: button });
   }

   function onSuccess(values,ctx) {
      var form = document.createElement('form');
      form.action = reporting-services.url;
      form.method = 'post';
      document.body.appendChild(form);
      .... add hidden fields to form from returned values
      form.submit();
      document.body.removeChild(form);
   }

   function onFailure(error,ctx) {
      ... pop up some error message....
   }

  </script>

  ...

  <asp:Button runat="server" id="reportButton" ClientClick="submitReport(this);return false;" Text="Report" />
于 2008-10-08T00:21:04.493 に答える
0

通常、アプリが作成したポップアップ ウィンドウを閉じても問題ありません。

これはwindow.close()で行うことができます (ウィンドウがスクリプトによって作成されたものではない場合、確認がポップアップ表示されます)。

ウィンドウを閉じる前にダウンロードが成功したことを確認したい場合は、サーバー側の魔法を実行する必要があります。サーバーに進行中のダウンロードを追跡させ、ダウンロードが完了するまでポップアップ ウィンドウから AJAX 経由でポーリングします。完了します。

サーバーが完了したことを通知したら、ウィンドウを閉じることができます。

于 2008-10-07T23:32:08.257 に答える