2012-05-03 46 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