1

これが私の問題です。ExportFileへの応答を使用するコードがありますが、問題は応答コードの後に​​あります。後続のコードは実行されなくなるか、読み取られたが無視されたようになります。初心者でごめんなさい。これが私のコードです:

fullFilePath = "" + rootPath + "" + Filename + ".xlsx";
string fileName = fullFilePath.Substring(fullFilePath.LastIndexOf('\\') + 1);
byte[] buffer;

using (FileStream fileStream = new FileStream(fullFilePath, FileMode.Open))
{
    int fileSize = (int)fileStream.Length;

    buffer = new byte[fileSize];

    // Read file into buffer
    fileStream.Read(buffer, 0, (int)fileSize);
}

Response.Clear();

Response.Buffer = true;
Response.BufferOutput = true;
Response.ContentType = "application/x-download";
Response.AddHeader("Content-Disposition", "attachment; filename=" + fileName);
Response.CacheControl = "public";
// writes buffer to OutputStream
Response.OutputStream.Write(buffer, 0, buffer.Length);
newFile.Delete();


ClientScript.RegisterStartupScript(GetType(), "id", "EnableCtrl()", true);

これが実行された後、JavaScript「EnableCtrl()」は起動またはトリガーされません。そして、応答に関連するコードの部分を削除して、それを別のものに変更すると、javascriptがトリガーされます。では、応答コードの後に​​JavaScriptを実行するにはどうすればよいですか?

4

1 に答える 1

1

ブラウザにはすでに応答が送信されているため、スクリプトはこのメソッドをトリガーできません/できません。これはファイルであり、ポストバックからのマークアップではありません。1 つの要求。1 つの応答。そして、それはポストバック マークアップではありませんでした。

代わりに、次のいずれかをお勧めします。

  1. ブラウザで開始コントロールの「クライアント クリック」も処理します (アクションは で遅延する可能性がありますsetTimeout)。ブラウザーは、応答の添付ファイルの配置により、実際にはページ/DOM を更新しません。これが機能する理由です。ただし、ダウンロードが受け入れられたか、開始されたか、または完了したかを示すクライアント側のイベントはありません1

  2. 「ダウンロード」が他の副作用のない別のアクションになるように設計を変更します。

ハッピーコーディング。


1アップロード進行状況インジケータのように、クライアントがダウンロードの進行状況を照会できるようにするサーバー支援セットアップを考案することは可能です。ただし、これは些細なことでも標準的なことでもなく、状態を正確に反映していない可能性があります。

于 2012-05-31T16:16:30.530 に答える