2009-07-06 48 views
8

我有一個表格,用戶必須填寫並提交。控制器動作做了一些工作,並決定用戶可以擁有一個文件,然後重定向到另一個作爲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"); 
    } 

回答

11

頁眉只需添加到您的回覆,在動作爲您重定向的頁面。

谷歌搜索想出了這個標題:

Refresh: 5; URL=http://host/path 

在你的情況下,URL將與URL來代替你的下載操作

當我閱讀的頁面說,5號是「刷新」到url之前要等待的秒數。

隨着文件被下載,不應該移動你把你漂亮的重定向頁面:)

+0

...謝謝你的回答使我有些不同的研究中,我找到了這個網頁: HTTP: //weblogs.asp.net/rashid/archive/2009/04/29/fun-with-http-headers-in-asp-net-mvc-action-filters.aspx – 2009-07-06 15:14:44

相關問題