2011-11-10 38 views
4

是否有可能返回一個文件進行下載並從控制器方法調用更新視圖?返回一個文件和MVC3控制器動作中的渲染視圖

或需要解決方法,可能使用JavaScript(加載後調用頁面刷新)?

文件下載是在ViewModel (從頁面上的各種控件搜索參數)中設置的參數上實時創建的。

+1

沒有,你將不得不另謀出路。 – BNL

回答

7

您可以返回使用視圖模型或從ViewData的你的行動文件的地址,並使用window.location.href作爲視圖結束下面的代碼演示。

控制器

public ActionResult Index() 
{ 
    /* ... */ 

    ViewBag.FileName = "{FileName}"; 
    return View(); 
} 

public ActionResult Download(string id) { 
    /* ... */ 

    return File("{Path}", "{MIME type}", "{Desired file name}"); 
} 

標記

<script type="text/javascript"> 

    window.location.href = "/home/download/" + "@Ajax.JavaScriptStringEncode(@ViewBag.FileName)"; 

</script> 
+0

如果我的文件不是通過物理方式存儲,而是內容依賴於一系列表單控件的流? –

+1

@AlessandroLendaro對於你來說'FileResult'有一個重載,而不是路徑。此外,您可以通過查詢字符串或路由參數將您的值從客戶端發送到服務器。 –

1

一個請求可以有一個響應誰的響應類型在響應頭中定義,所以基本答案是否定的。
你可以看看做的是返回一個包含JavaScript,然後將請求文件下載的視圖。

2

雖然無法在ViewResult旁邊返回FileResult,但您可以在返回的視圖上使用元刷新以在頁面加載後重定向到文件。

<meta http-equiv="refresh" content="600;url=/path/to/the/file" /> 
相關問題