Вы не можете использовать 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"
/>
<% } %>
И чтобы кнопка загрузки выглядела nice , вы можете создать nice download.png
изображение, которое будет использоваться в качестве кнопки отправки формы.