javascript - 文件下载弹出窗口不起作用

标签 javascript asp.net ajax httphandler

我正在开发 ASP.NET Web 表单应用程序。 我的要求是当用户单击给定链接时显示 excel 文件下载弹出框(此链接位于弹出页面而不是 aspx 页面上。)。 我有一个带有链接的 aspx 页面。当用户点击时,它会调用js函数,通过我们调用Web服务方法来生成弹出屏幕的html。

代码:

 function showListModelFromGenrator(divId) {
    var lowner = $("#" + hdnLoggedInOwnerID)[0].value;
    var sowner = $("#" + hdnSelectedOwnnerID)[0].value;
    var commID = $("#" + hdnCommunityId)[0].value;


    var controlid = '#' + divId;
    $.ajax({
        url: baseUrl + '/' + "WebServices/ExtraInfoWebService.asmx/GetProductActivityStatus",

        data: { LoggedInOwnerId: lowner, SelectedOwnerId: sowner, CommunityId: commID },
        success: function (response) {
            $(controlid).dialog("destroy");
            $(controlid).dialog({
                autoOpen: false,
                modal: true,
                width: 560,
                height: 370,
                resizable: false

            }).empty().append(response.text);
            $(controlid).dialog('open');
            var busyBox = new BusyBoxWrapper()
            busyBox.HideBusyBoxAfter(5);
        },
        cache: false
    });
}

网络方法:

[WebMethod(EnableSession = true)]
    public string GetProductActivityStatus(int LoggedInOwnerId, int SelectedOwnerId, int CommunityId)
    {
        StringBuilder stringAuditStatus = new StringBuilder();
        Audit objdata = new Audit();
        try
        {
            DataTable dt = new DataTable();
            int ownerID = LoggedInOwnerId;
            if (SelectedOwnerId != 0)
                ownerID = SelectedOwnerId;

            dt = objdata.GetListmodeldata(ownerID, CommunityId);

            stringAuditStatus.Append(@"<table><tr class=addressTableHeader><td>Code</td>" +
                                            "<td>Description</td>" +
                                            "<td>Status</td>" +
                                            "<td>Date</td></tr>");
            foreach (DataRow item in dt.Rows)
            {
                stringAuditStatus.Append(


                                            "<tr><td>" + item["Code"] + "</td>" +
                                            "<td>" + item["Description"] + "</td>" +
                                            "<td>" + item["Status"] + "</td>" +
                                            "<td>" + item["Date"] + "</td></tr>");
            }
            stringAuditStatus.Append("</table>");
            stringAuditStatus.Append("<a id=lnkViewProductCodeStatus runat='Server' href='#' onclick='javascript:ExportExel();'>DownloadListModel</a>");


        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }

        return stringAuditStatus.ToString();
    }

当用户单击“lnkViewProductCodeStatus”(上面由 Web 方法创建)时。 我们调用JS函数ExportExcel,它调用处理程序方法来处理要下载的文件。

function ExportExel(){
    var abc;
    $.ajax({
        type: "POST",
        url: baseUrl + '/' + "WebServices/ExtraInfoWebService.asmx/Urlhttphandler",
        data: {},
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (msg) {
            //window.open(msg.d);
            $.ajax({
                type: "POST",
                url: msg.d,
                data: {},
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (msg) {
                    //window.open(msg.d);
                }
            });
        }
    });
public void ProcessRequest(HttpContext context)
    {


        string FullFilePath = context.Server.MapPath("~/Certificates/" + "ExcelFile.xls");
        System.IO.FileInfo file = new System.IO.FileInfo(FullFilePath);

        if (file.Exists)
        {
            //For more MIME types list http://msdn.microsoft.com/en-us/library/ms775147%28VS.85%29.aspx
            context.Response.ContentType = MIMETypeUtility.MIMETypeDescription(MIMEType.Excel);
            context.Response.AddHeader("Content-Disposition", "attachment; filename=\"" + file.Name + "\"");
            context.Response.AddHeader("Content-Length", file.Length.ToString());
            context.Response.WriteFile(file.FullName);
            context.Response.Flush();
            context.Response.End();
        }



    }

当我调试应用程序时,调用正确地处理,但文件下载弹出窗口没有出现。我在页面上尝试的相同代码(而不是弹出窗口)它工作正常。任何人都可以指导我为什么这在我的情况下不起作用。

非常感谢, 普拉桑特

最佳答案

无法使用 ajax 保存文件。它将获取数据,但永远不会显示下载对话框。请参阅Download a file by jQuery.Ajax了解更多信息。

我最近也有类似的需求,最终让 javascript Excel 下载功能在页面上动态创建一个表单(操作指向生成 Excel 文件的 .ashx 处理程序)。然后,该函数使用包含 .ashx 处理程序所需的任何参数的隐藏输入填充表单,最后提交它。

基于我所做的事情的示例:

 function ExportExcel() {
    var formFragment = document.createDocumentFragment();
    var form = document.createElement("form");
    $(form).attr("action", baseUrl + "/WebServices/ExtraInfoWebService.asmx/Urlhttphandler")
        .attr("method", "POST");

    var inputField = document.createElement("input");
    $(inputField).attr("type", "hidden")
        .attr("id", "someId")
        .attr("name", "someId")
        .val(3);
    form.appendChild(inputField);

    formFragment.appendChild(form);
    $("body").append(formFragment);
    $(form).submit();
};

关于javascript - 文件下载弹出窗口不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15382378/

相关文章:

c# - tinyMce activeeditor 在回发时为空

javascript - "Gmail style"Web表单的部分更新

Javascript 不适用于 ajax 生成的代码?

php - Prestashop block 推车和推车 Controller

javascript - 在 Chrome 和 IE 中记录元素的不同输出

javascript - 如何在传奇中使用警报,暂停它,并且仅在按下按钮时才继续?

c# - 百万交易 - 提高网站性能

javascript - 使用 jQuery 的功能 promise

javascript - 数组函数返回 null

javascript - 我怎样才能让它显示菜单上的所有内容而不必搜索?