是否有可能返回一個文件進行下載並從控制器方法調用更新視圖?返回一個文件和MVC3控制器動作中的渲染視圖
或需要解決方法,可能使用JavaScript(加載後調用頁面刷新)?
文件下載是在ViewModel (從頁面上的各種控件搜索參數)中設置的參數上實時創建的。
是否有可能返回一個文件進行下載並從控制器方法調用更新視圖?返回一個文件和MVC3控制器動作中的渲染視圖
或需要解決方法,可能使用JavaScript(加載後調用頁面刷新)?
文件下載是在ViewModel (從頁面上的各種控件搜索參數)中設置的參數上實時創建的。
您可以返回使用視圖模型或從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>
如果我的文件不是通過物理方式存儲,而是內容依賴於一系列表單控件的流? –
@AlessandroLendaro對於你來說'FileResult'有一個重載,而不是路徑。此外,您可以通過查詢字符串或路由參數將您的值從客戶端發送到服務器。 –
一個請求可以有一個響應誰的響應類型在響應頭中定義,所以基本答案是否定的。
你可以看看做的是返回一個包含JavaScript,然後將請求文件下載的視圖。
雖然無法在ViewResult旁邊返回FileResult,但您可以在返回的視圖上使用元刷新以在頁面加載後重定向到文件。
<meta http-equiv="refresh" content="600;url=/path/to/the/file" />
沒有,你將不得不另謀出路。 – BNL