我想下载.CSV并将用户重定向到另一个页面。
这是我的代码
protected void btnExport_Click(object sender, EventArgs e)
{
string attachment = "attachment; filename=" + Request.QueryString["exportName"] + ".csv";
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.ClearHeaders();
HttpContext.Current.Response.AddHeader("content-disposition", attachment);
HttpContext.Current.Response.ContentType = "application/ms-excel";
//CODE TO WRITE CSV
List<Company> companies = (List<Company>)Session["SelectedCompanies"];
foreach (Company company in companies)
{
HttpContext.Current.Response.Write(company.Name + ";");
HttpContext.Current.Response.Write(Environment.NewLine);
}
HttpContext.Current.Response.Redirect("otherpage.aspx", true);
}
但不幸的是,它只进行重定向,而不是下载.CSV。
如果我将HttpContext.Current.Response.Redirect("otherpage.aspx", true);
替换为HttpContext.Current.Response.End();
,那么它只会下载.CSV,而不会重定向。
但我想同时拥有两者。
答案 0 :(得分:2)
据我所知,这两个动作无法在一个请求中完成,要么重定向用户要么给文件。试着改为两个动作。
答案 1 :(得分:1)
在这种情况下,我所做的是:
隐藏了iframe
&LT; iframe id =“DownloadIFrame”visible =“false”width =“1”height =“1”style =“display:none”&gt; &LT; / iframe&gt;
在更改我的网页内容时,将此iframe作为我的下载的网址(例如download.ashx)。
在服务器上
public string DownloadViaIFrame(Page page, Download download)
{
string script = string.Format(
@"
var IsDownloaded=false;
domReady(function() {{
if (document.getElementById('DownloadIFrame')==undefined)
alert('DownloadIFrame not found');
else
{{
if (!IsDownloaded)
{{
{0};
IsDownloaded=true;
}}
}}
}});", GetJavasciptToDownloadViaIFrame(download));
ScriptManager.RegisterClientScriptBlock(page, typeof(Page), "download", script, true);
return script;
}
public string GetJavasciptToDownloadViaIFrame(Download download)
{
return string.Format("document.getElementById('DownloadIFrame').src='{0}'", GetDownloadLink(download));
}
这样,Iframe就会点击服务器上的下载脚本并返回客户端要下载的文件。客户同时看到其页面内容发生变化并且很高兴。
祝你好运,答案 2 :(得分:0)
据我所知,没办法做出这两个动作。 尝试重定向到另一个Page.aspx,并在另一个Page.aspx中注入一个javascript代码,在onload事件中连接到特定的“真实”下载页面