我正在返回由表單發佈事件觸發的操作的文件結果。 我無法獲得下載對話框。相反,如果我使用:沒有與FileResult的下載對話框
return File(Encoding.UTF8.GetBytes(reportPath), "text/plain", "Report.csv");
我在目標div中獲得執行ajax時文件的路徑。
當我使用
return File(reportPath, "text/plain", "Report.csv");
我得到目標DIV文件的內容。作爲
[HttpPost]
public virtual ActionResult ExportFilter(Model model) {
string outputFile = CreateReport(model);
return File(....)
}
的形式通過Ajax.BeginForm(...)submited
動作聲明。更
編輯
有點信息:我的形式有2個提交按鈕。一個用於在目標div中顯示結果,另一個用於導出結果。該actton是相同的,我用它來確定哪個按鈕觸發事件:
[HttpPost]
public virtual ActionResult Run(model)
{
var bExecute = !string.IsNullOrEmpty(Request.Form["execute"]);
return bExecute ? Execute(model) : Export(model);
}
[HttpPost]
public virtual ActionResult Execute(model)
{
....
return PartialView("Report", model);
}
[HttpPost]
public virtual FileResult Export(model) {
.....
return File(....)
}
一些答案後,我試圖使用重定向到獲取行動:
....
return RedirectToAction(MVC.Report.OfferDownload(ReportFile));
}
[HttpGet]
public virtual FileResult OfferDownload(string FileName)
{
return File(FileName, "text/csv", "Report.csv");
}
然而,這並沒有幫助。
我也嘗試過Stream文件,但它也沒有幫助。
EDIT2
肯定阿賈克斯問題,因爲當我與Html.BeginForm取代Ajax.BeginForm它的工作原理。我想到的一個解決方案是使用提交按鈕上的onclick事件來更改表單屬性。
我認爲主要問題是AJAX提交 - 請參閱我的更新答案。 – tvanfosson 2010-03-22 19:26:46
您應該在POST請求後重定向用戶,並讓該方法提供該文件。郵政/重定向/獲取。您還應該明確地將您的操作方法的返回類型設置爲FileResult。 – 2010-03-22 19:36:07
我確實嘗試過,看我的編輯。 – majkinetor 2010-03-23 10:50:19