私のビューには次のようなものがあります。
var url = '@Url.Action("DownloadZip", "Program")' + '?programNums=' + selectedRow;
$.ajax({
url: url,
dataType: 'json',
async: false,
success: function (data) {
if (data != "Successful") {
alert(data);
}
}
});
コントローラはファイルを返すか、エラーが発生した場合はJSONの結果を返すことができます。両方を一緒に動作させることができていません。
これがどのように見えるかです:
public ActionResult DownloadZip(string programNums)
{
if(string.IsNullOrEmpty(programNums))
{
return Json("Error, blank info sent.", JsonRequestBehavior.AllowGet);
}
var memoryStream = new MemoryStream();
using (var zip = new ZipFile())
{
zip.AddFile("C:\\sitemap.txt");
zip.Save(memoryStream);
}
memoryStream.Seek(0, 0);
return File(memoryStream, "application/octet-stream", "archive.zip");
}
私が見ているのは、ajax呼び出しにはJSON値が必要であるということです。私の場合、ファイルを返すので動作しません。とにかく、ajax呼び出しからJSONまたはファイルを返すことができる場所に私が行っていることを処理します。