下载按钮无响应

问题描述 投票:0回答:1

即使我的代码没有错误,也不知道出了什么问题,我对浏览器也没有反应。

代码到达return File(memoryStream, contentType, "test" + extension);,没有错误,但浏览器没有响应。

[HttpPost]
public ActionResult DownloadAttachment(eNotice.attachment attachment)
{
    try
    {
        var attachmentToDownload = db.Tbl_ENoticeAttachements.Where(a => a.ENID == attachment.ENID && a.IsDeleted == false && string.Compare(a.FileName, attachment.FileName, StringComparison.OrdinalIgnoreCase) == 0).FirstOrDefault();
        if (System.IO.File.Exists(attachmentToDownload.FilePath + @"\" + attachmentToDownload.FileName))
        {
            var file = System.IO.File.ReadAllBytes(attachmentToDownload.FilePath + @"\" + attachmentToDownload.FileName);
            var extension = Path.GetExtension(attachmentToDownload.FileName);
            MemoryStream memoryStream = new MemoryStream(file);
            byte[] bytes = memoryStream.ToArray();
            memoryStream.Seek(0, SeekOrigin.Begin);
            var contentType = System.Web.MimeMapping.GetMimeMapping(attachmentToDownload.FileName);
            return File(memoryStream, contentType, "test" + extension);
        }
        else
        {
            return null;
        }
    }
    catch (Exception exception)
    {
        exception = exception;
        return null;
    }
}

上面的代码是通过javascript调用的:

$('#buttonTest').click(function () {
    var ENID = $(this).data('enid');
    var FileName = $('#buttonTest').val();
    var formData = "{FileName:'" + FileName + "',ENID:'" + ENID + "'}";
    makeAjaxCall("", '@Url.Action("DownloadAttachment", "eNotice")', formData, "", "", "");
});
c# model-view-controller .net-4.5
1个回答
0
投票

这是我的工作:在我的情况下,data只是一个文件名和文件扩展名,但是从您的外观看,您的文件名是一个文件。

$.ajax({
            url: '@Url.Action("// Action", "// Controller")',
            type: 'POST',
            data: JSON.stringify(data),
            contentType: 'Application/json',
            success: function (result) {
                if (result.success) {
                    window.location.href = '@Url.Action("// Action", "// Controller")
                }
                else {
                    debugger;
                    errorNotification("Error! " + result.message);
                }
            }
        });

在我的控制器中,我有一个全局静态字节[]。

[ajax调用调用一个控制器方法,该方法获取一个文件并将其保存为字节数组,然后我将全局静态字节[]设置为此结果。此后,您可以从此函数返回任何内容,如果对byte []的转换失败,我将返回布尔值和一条消息。

在成功执行ajax时,我有一个windows.location.href,它调用一个控制器操作,该操作仅将File返回到视图。

return File(_fileContents, "application/force-download", "test" + extension);

在我的情况下,[_fileContents是先前设置的全局静态字节[]的名称。

© www.soinside.com 2019 - 2024. All rights reserved.