下载和重定向

时间:2012-04-06 07:00:45

标签: c# asp.net response.redirect

我想下载.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,而不会重定向。

但我想同时拥有两者。

3 个答案:

答案 0 :(得分:2)

据我所知,这两个动作无法在一个请求中完成,要么重定向用户要么给文件。试着改为两个动作。

答案 1 :(得分:1)

在这种情况下,我所做的是:

  1. 隐藏了iframe

    &LT; iframe id =“DownloadIFrame”visible =“false”width =“1”height =“1”style =“display:none”&gt;   &LT; / iframe&gt;

  2. 在更改我的网页内容时,将此iframe作为我的下载的网址(例如download.ashx)。

  3. 在服务器上

    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事件中连接到特定的“真实”下载页面