12

我想通过在 MVC 下使用带有一些参数的 jQuery AJAX 调用来提供文件下载操作

例子

(javascript)
function DoDownload(startDate) {

  $.ajax({ 
     url:"controller/GetFile/",
     data: {startDate:startDate}
     ...
  });

}

C# Controller Code

 public void GetFile(string startDate) {

  var results = doQueryWith(startDate);

   // Create file based on results
   ....
   // How do I tell the server to make this a file download??
 }

我通常只会让我的文件下载一个链接,例如:

<a h r e f="mycontroller/getfile/1"/>Download</a>

但在上述情况下,日期将是动态的。

如果我不使用 ajax,那么使用 javascript 将参数传递给 MVC 控制器的首选方法是什么?

例子:

window.location  = "mycontroller/GetFile/" + $("#fromDate").val();

假设日期是 12-25-2012

这会产生

mycontroller/GetFile/12/25/2012

MVC 会将其视为三个参数吗?

4

4 回答 4

11

我最终做的是从我的 javascript 中调用我的控制器,例如:

var url = "/mycontroller/GetFile?startDate=" + $("#mydate").val() + etc...

window.location = url;

我的控制器.cs

 public void GetFile(DateTime startDate) 
{

}

我最初关心的是日期参数。我不想解析它。

于 2013-01-07T15:11:55.850 回答
3

您可以使用File控制器类的方法将文件返回给浏览器。

下面的示例返回一个 pdf 文件。

public ActionResult GetFile(int id)
{
  var fileInfo=repositary.GetFileDedetails(id);
  var byteArrayOFFile=fileInfo.FileContentAsByteArray();
  return File(byteArrayOFFile,"application/pdf","yourFriendlyName.pdf");
}

假设repositary.GetFileDedetails方法从 id 返回文件的详细信息。

您还可以从物理位置(路径)或流返回文件。检查方法的所有重载File并使用适当的重载。

这与ajax无关。这是浏览器上的正常GET请求。

于 2012-12-30T04:15:02.580 回答
3

使用 ActionLink 帮助器,您可以将多个参数传递给您的控制器:

HtmlHelper.ActionLink(
    string linkText, 
    string actionName, 
    string controllerName, 
    object routeValues, 
    object htmlAttributes
)

所以在你的情况下:

@Html.ActionLink("Download file", "GetFile", "MyController", new { startDate = "##" }, new { id="mydownloadlink" })

使用 jQuery,您可以使用startDate日期选择器或文本框的内容更改链接中的值。

$("#mydownloadlink").attr("href").replace("##", $("#yourdatetexbox").val);

然后,在您的控制器中,只需使用此处的其他答案之一, about FileResult

希望这可以帮助你...

于 2012-12-30T14:32:35.400 回答
1

您的控制器操作方法应返回 FileResult 而不是 void。并且没有必要通过 AJAX 执行此操作 - 事实上,您不想使用 AJAX 执行此操作。您将需要涉及的浏览器,以便它知道为用户提供下载对话框。

请参阅以下链接:

处理 (jQuery) Ajax 调用中返回的 ASP.NET MVC FileResult

Asp.Net MVC 2 中的文件下载

我希望这有帮助。

于 2012-12-30T03:44:13.997 回答