.aspx ページ全体が表示された後にアクションを実行しようとしています。「アクション」は、Response オブジェクトを使用してユーザーにファイルを送信する関数です。
詳細情報:
ページ上のリンクの動作をサイドバーから再現しようとしています。IE エクスポート アクションのメイン ページにリンクがあり、ユーザーがクリックする前にページが既に表示されているため、正常に動作します。しかし、ユーザーがサイドバーにいるときにリンクをクリックすると、ユーザーはこのメイン ページに戻り、表示後にファイルを送信する必要があります。
私はいくつかの調査を行い、PageComplete イベントを使用するのがこれに適していると考えたので、イベント ハンドラーを作成し、PageComplete 内にエクスポート コード (サイドバーからロードされたときにクエリ文字列からキーを外します) への呼び出しを配置しました。イベントハンドラ。しかし、動作はまったく同じです。ブラウザのダウンロード ボックスが表示され、その前後にページが読み込まれることはありません。
ここで何をしているのかを理解するのに役立つ場合は、リストをユーザーに送信するために使用されるコードのスニペットを示します。
Response.Clear();
Response.BufferOutput = true;
Response.ContentType = "application/ms-excel";
Response.AppendHeader("content-disposition", "attachment;filename=MyList.xls");
Response.Write(listManager.ExportLists(mycode));
Response.End();
このロジックをいじるよりも、ページイベントを使用してページをロードする方法をお勧めします。ただし、ファイルを送信するクリーンで簡単な方法があり、ページをロードしてからファイルを送信できる場合は、それも問題ありません。
PageComplete 以外に使用できる別の Page イベントはありますか、それとも何か不足している可能性はありますか?
編集:冗長について申し訳ありません。HTTP リクエストの動作を変更することはできないことを認識しています。多かれ少なかれ同じ結果を達成する受け入れ可能なソリューションを探しているだけです。数秒後にページを強制的に更新する方法のようです(したがって、ファイルダウンロードコードが実行される前にページが読み込まれるようにします)-最初の答えとしてこれを行う方法を探しています提案 - ダウンロードを更新します。(待たずに更新する方法があれば、遅らせる必要もありません)
このコードが機能しないのはなぜですか?
private void Page_LoadComplete(object sender, System.EventArgs e)
{
if (Request.QueryString["action"] != null)
{
if (Request.QueryString["action"] == "export")
{
Response.Redirect("MyHome.aspx?action=exportnow", false);
}
if (Request.QueryString["action"] == "exportnow")
{
ExportMasterList();
}
}
}
本来の動作: ページの読み込みが完了したら、Response.Redirect を実行し、別のクエリ文字列で自分自身を再読み込みします。再び Page LoadComplete イベントに到達すると、2 回目にファイルを書き出す関数がトリガーされます。
実際の動作: どうやら同じ問題を 2 回繰り返します... 同じ問題に戻ります。ページの読み込み後にアクションを実行する方法、またはページの読み込みが完全に終了するまで待ってから更新をトリガーして、アクション?ユーザーが何かをクリックせずに、ASP.NET が単独で何かを行う方法はありませんか?
その場合は、2 秒後に自動更新することもできますが、その方法がわかりません。