0

私は多くのリソースを調べましたが、以下は機能するはずですが、[名前を付けて保存]ダイアログボックスが表示されません(ブラウザー固有ではありません)。

Response.ContentType = "application/octet-stream";
string downloadName = "Request "+request.RequestID+ "_researchExport.doc";
Response.AddHeader("Content-Length", 
    new System.IO.FileInfo(FileName).Length.ToString());
Response.AddHeader("Content-Disposition", 
    string.Format("attachment; filename={0};", downloadName));
Response.WriteFile(FileName);
Response.Flush();
Response.End();

ファイルは間違いなく存在します。私も次のことを試しました:

  1. Response.TransmitFile(FileName)代わりに使用する

  2. 除外してResponse.End()

  3. ヘッダーをContent-Length省く

  4. 使用するthis.ControllerContext.HttpContext.Response

どんな助けでも歓迎です

4

2 に答える 2

2

それが唯一の問題かどうかはわかりませんが、Content-Dispositionヘッダーのファイル名はであると想定されているquoted-stringため、特にスペースが含まれているため、その周りに引用符を追加する必要があります。

Response.AddHeader("Content-Disposition", 
    string.Format("attachment; filename=\"{0}\"", downloadName));

ちなみに、Response.End()バッファもフラッシュするので、Response.Flush()冗長です。

于 2013-03-17T07:39:16.367 に答える
0

問題を解決しました。私はAjaxを使用して、自分のビューの1つからこの関数を呼び出していました。これはうまくいきませんでした(理由はわかりません)が、複数のコントローラーがあるためかもしれません。からこれを呼び出す@HTML.ActionLink()と、プロンプトが正しく表示されました。

于 2013-03-22T18:48:28.067 に答える