2012-05-03 136 views
2

我有了一个jQuery后jQuery的岗位不允许CSV文件MVC应用程序

$.post(virtualPath + cookie + this.pageName + '/FunctionA/', parameters,function (filedata) { 
    alert(filedata); 
    },'application/csv'); 
} 

这篇文章是由JavaScript事件称为由一个buttonclick触发下载文件中的MVC应用程序下载

我得到警报的服务器端的HTTP响应的文件,但 不能让它在浏览器

控制器可下载返回响应,FileContentResult

[AcceptVerbs(HttpVerbs.Post)] 
    public FileContentResult FunctionA(string A, DateTime B) 
    { 
     try 
     { 
      string csv = "Make it downloadable "; 
      var filresult = File(new System.Text.UTF8Encoding().GetBytes(csv), "application/csv", "downloaddocuments.csv"); 
      // return filresult; 

      Response.Clear(); 
      Response.Buffer = true; 
      Response.ContentType = "application/vnd.ms-excel"; 
      Response.AddHeader("content-disposition", "attachment; filename=Statement_" + "Downloadfile" + ".csv"); 
      Response.Write(csv); 
      Response.Flush(); 
      return filresult; 
     } 
    } 

回答

4

您无法使用AJAX下载文件。原因是因为一旦下载成功并调用成功回调,您既不能自动将文件保存到客户端浏览器,也不能提示您选择另存为对话框。

因此,而不是使用JavaScript和AJAX下载此文件只需使用标准链接控制器的行动,这将允许用户直接下载文件。


UPDATE:

如这里的注释部分要求是使用锚的例子:

@Html.ActionLink(
    "download file", 
    "actionName", 
    "controllerName", 
    new { 
     param1 = "value1", 
     param2 = "value2", 
    }, 
    null 
) 

,或者如果你需要传递大量的参数,你可能更愿意使用形式隐藏的字段,将POST:

@using (Html.BeginForm("actionName", "controllerName")) 
{ 
    @Html.Hidden("param1", "value1") 
    @Html.Hidden("param2", "value2") 
    <button type="submit">Download file</button> 
} 
+0

Darin你可以发布一个例子或样本 – chapot

+0

苏我已经用一个例子更新了我的答案。 –

+0

达林感谢您的及时和快捷response.the应用程序,我现在用的就是一个MVC 2。我不知道如果你there.Can确认动作链接支持? – chapot