asp.net-mvc - 如何在 AsyncControl 中使用 MVC 下载文件?

标签 asp.net-mvc asp.net-mvc-2 download

我有

public class FileController : AsyncController
{
  public ActionResult Download(FormCollection form)
  {
    FileContentResult file = new FileContentResult(Encoding.UTF8.GetBytes("10k file size"),"application/vnd.xls");
    file.FileDownloadName = "test.xls";

    return file;
  }
}

当然还有ajax形式

<% var form = Ajax.BeginForm(...) %>
  <input type="image" src="...gif" /> // this is my 1st attempt
  <%= Ajax.ActionLink(...) %>         // 2nd attempt
<% form.EndForm(); %>
  1. 我尝试第一种方法(输入类型=图像)。它达到正确的行动。但客户端没有文件下载。
  2. 然后我尝试使用我非常讨厌的 Ajax.ActionLink。我想要漂亮的图像按钮,而不是链接文本。同样,它达到正确的操作并且没有文件下载。但是如果我在另一个窗口中打开链接,就会有文件下载!!

Q. 如何使用 AsyncController 下载一个漂亮的文件

问。如何使 Ajax.ActionLink 看起来不错

最佳答案

您不能使用 Ajax 从服务器下载文件。这样做的原因是,即使您成功向 success 中的服务器发出异步请求。回调你将获得从服务器发送的文件内容,你不能在客户端对这个文件做太多事情。请记住,javascript 无法访问文件系统,因此您将无法保存它。实现此目的的方法是使用普通的 HTML <form>这将指向 Download行动。提交此表单后,将要求用户选择他想要保存文件的位置,然后下载将继续进行。此外,您不需要为此使用 AsyncController。

这是一个例子:

public class FileController : Controller
{
    [HttpPost]
    public ActionResult Download()
    {
        return File(
            Encoding.UTF8.GetBytes("10k file size"),
            "application/vnd.xls",
            "test.xls"
        );
    }
}

在你的视野中:

<% using (Html.BeginForm("download", "file", FormMethod.Post)) { %>
    <input 
        type="image" 
        src="<%: Url.Content("~/content/images/download.png") %>" 
        value="download" 
        alt="download" 
    />
<% } %>

为了使下载按钮看起来漂亮,您可以创建一个漂亮 download.png将用作表单提交按钮的图像。

关于asp.net-mvc - 如何在 AsyncControl 中使用 MVC 下载文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4702246/

相关文章:

c# - 在 asp.net mvc4 应用程序中向 HtmlHelper 添加扩展方法

jquery - 构建 jQuery 选项卡的更好方法

c# - 什么数据库适合保存小图像

asp.net - MVC ValidateAntiForgeryToken 多标签问题

powershell - 我可以使用 Invoke-WebRequest 将二进制数据写入文件并仍然获取状态代码吗?

android - 从服务下载文件(更新 UI)

c# - Dropzone.js 已附加

angularjs - Chrome 网络计时,如何改进内容下载

asp.net-mvc - 从正常的 aspx web 表单调用 asp.net mvc Controller ?

javascript - 从磁力链接数组下载多个种子