C# 是否可以使用ajax.beginform下载文件?还是ajax?

C# 是否可以使用ajax.beginform下载文件?还是ajax?,c#,asp.net-mvc,C#,Asp.net Mvc,以下是我的控制器的代码: [HttpPost] public async Task<ActionResult> DownloadItemList(int subcampaignId, string SheetName, string filename) { DataSet ds = new DataSet(); string url = string.Format("api/report/subcampaign/{0}", subc

以下是我的控制器的代码:

[HttpPost]
    public async Task<ActionResult> DownloadItemList(int subcampaignId, string SheetName, string filename)
    {

        DataSet ds = new DataSet();

        string url = string.Format("api/report/subcampaign/{0}", subcampaignId);

        var response = await req.GetXMLAsync(url);
        XmlDocument xmlDoc = new XmlDocument();
        try
        {
            if (response.IsSuccessStatusCode)
            {
                var content = await response.Content.ReadAsStringAsync();

                xmlDoc.PreserveWhitespace = true;

                xmlDoc.LoadXml(content);

                XmlNodeReader xmlReader = new XmlNodeReader(xmlDoc);

                ds.ReadXml(xmlReader);


            }


            IDataTableToWorkbookUtility workbookExportUtility = new DataTableToWorkbookUtility();

            byte[] excelContent = workbookExportUtility
            .ExportDataTableToWorkbook(ds.Tables[0], SheetName)
            .GetBytes();

            return this.File(excelContent, "application/vnd.ms-excel", filename + ".xls");
        }
        catch (Exception e)
        {
            log.Debug("CampaignListController/GetAudio: " + e.Message);
            throw;
        }
    }
[HttpPost]
公共异步任务DownloadItemList(int subcompagignid、字符串SheetName、字符串文件名)
{
数据集ds=新数据集();
stringurl=string.Format(“api/report/subcompaign/{0}”,subcompaignid);
var response=wait req.getxmlsync(url);
XmlDocument xmlDoc=新的XmlDocument();
尝试
{
if(响应。IsSuccessStatusCode)
{
var content=await response.content.ReadAsStringAsync();
xmlDoc.PreserveWhitespace=true;
LoadXml(内容);
XmlNodeReader xmlReader=新的XmlNodeReader(xmlDoc);
ReadXml(xmlReader);
}
IDataTableToWorkbookUtility workbookExportUtility=新数据表ToWorkBookUtility();
字节[]excelContent=workbookExportUtility
.ExportDataTableToWorkbook(ds.Tables[0],图纸名称)
.GetBytes();
返回此.File(excelContent,“application/vnd.ms excel”,filename+“.xls”);
}
捕获(例外e)
{
log.Debug(“活动列表控制器/GetAudio:+e.Message”);
投
}
}

当我使用ajax.beginform。。响应不是下载文件,而是读取为文本。我想使用ajax,因为我想在用户单击submit按钮时显示加载栏。。我只想在等待下载文件时显示加载状态

实际上,您无法通过AJAX上传或下载文件

你可以试试下面的场景

如果文件已成功找到/创建。将JSON结果与文件链接一起发回。然后在javascript中使用windows.location检索文件。当出现错误时,JSON结果将包含错误信息,并且该信息可以显示给用户。要使其工作,您需要创建另一个端点(操作),该端点可以对文件进行流式处理

 $.ajax({
    ..
     success: function(data)
     {
      if( data.result=='success' ){
        window.open(download_path + data.fileName); 
        }        
     }
    ..
    })

实际上可以,您需要使用blueimp的文件上传jquery。它有大量的选项并支持跨域

它还有一个可以实现的加载条

嗨,我在哪里能找到“道洛路”?你能更详细地告诉我吗?塔克斯!