私はユーザーが記入して提出する必要があるフォームを持っています。コントローラーアクションはいくつかの作業を行い、ユーザーがファイルを持つことができると判断し、FilePathResultである別のアクションにリダイレクトします。私がやりたい何ファイルを同時に送信して新しいページにリダイレクトするMVCの方法は何ですか?
[CaptchaValidator]
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Index(FormCollection collection)
{
// do some stuff ...
return RedirectToAction("Download");
}
[AcceptVerbs(HttpVerbs.Get)]
public FilePathResult Download()
{
var fileName = "c:\foo.exe";
return File(fileName, "application/octet-stream", "installer.exe");
}
は、ファイルが、私をダウンロードするためのおかげで、ユーザが「MVCのような」方法でそれを達成するかどうかはわかりません別のページにユーザーをリダイレクトしています。
私の頭の上から外して考えることができる唯一の方法は、ダウンロードアクションをスキップし、代わりにThankYouアクションにリダイレクトして、ThankYouビューにJavaScriptを使用してファイルを送信させることです。しかし、これはちょうど私にとってMVCには見えません。より良いアプローチがありますか?
結果:
受け入れ答えは十分に正確であるが、私はそれを実装見せたかったです。
それはにリダイレクトindexアクションの変更:私は、ユーザーが任意の「ポストダウンロード情報」を表示するようにして、ファイルをダウンロードするためのありがとうを言うために、このコントローラ(およびビュー)を追加
return RedirectToAction("Thankyou");
。私がlink textから取得したAutoRefresh属性は、他の優れた用途を示しています。
[AutoRefresh(ControllerName="Download", ActionName="GetFile", DurationInSeconds=3)]
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult Thankyou()
{
return View();
}
前にそれがあったように、これと同じであるためにリダイレクトされますアクション:
[AcceptVerbs(HttpVerbs.Get)]
public FilePathResult GetFile()
{
var fileName = "c:\foo.exe";
return File(fileName, "application/octet-stream", "installer.exe");
}
おかげで...あなたの答えは、私は、このページを発見したいくつかの異なる研究に私を導く: ます。http: //weblogs.asp.net/rashid/archive/2009/04/29/fun-with-http-headers-in-asp-net-mvc-action-filters.aspx –
私は助けてくれるとうれしいです。私は属性メソッドが好きです。それはいい見てください。しかし、それが必要な場合は手動でヘッダーを追加するだけです。 – Sekhat