Javascript 文件下载弹出窗口不工作

Javascript 文件下载弹出窗口不工作,javascript,asp.net,ajax,httphandler,Javascript,Asp.net,Ajax,Httphandler,我正在开发ASP.NET Web表单应用程序。 我的要求是当用户单击给定链接时显示excel文件下载popupbox(该链接位于poppage上,而不是在aspx页面上)。 我有一个带有链接的aspx页面。当用户点击时,它将调用js函数,通过调用web服务方法生成弹出屏幕的html 代码: function showListModelFromGenrator(divId) { var lowner = $("#" + hdnLoggedInOwnerID)[0].value;

我正在开发ASP.NET Web表单应用程序。 我的要求是当用户单击给定链接时显示excel文件下载popupbox(该链接位于poppage上,而不是在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();
    }
web方法

 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();
    }
当我调试应用程序时,调用会正确地转到hanlder,但文件下载弹出窗口不会出现。我在页面上尝试的代码(不是弹出窗口)也可以正常工作。有人能告诉我为什么在我的情况下这不起作用吗

非常感谢,
Prashant

使用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();
};

使用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();
};