如何使用Response类创建下载文件,然后与客户端进行交互?

时间:2012-07-26 14:46:05

标签: c# javascript response window.open

我有一个按钮,其OnClientClick事件调用Generate()。

function Generate() {
    window.open('GenerateKey.aspx', '_newtab', 'titlebar = no', false);
    PageMethods.SendKey(SendKeyCallback, SendKeyCallbackError);
}

回调函数隐藏加载gif并提醒状态(成功/失败)

GenerateKey.aspx创建一个文件并打开下载弹出窗口。

这是page_load代码:

    string keyFileName = orgName + "-" + timeStamp + ".ckey";
    fs = new FileStream(Server.MapPath("~/License/Generate/" + keyFileName), FileMode.Create, FileAccess.ReadWrite);
    sw = new StreamWriter(fs);
    sw.Write(generatedKey);
    sw.Flush();
    fs.Close();
    Response.ContentType = "text/xml";
    Response.AppendHeader("Content-Disposition", "attachment; filename=" + keyFileName);
    Response.TransmitFile(Server.MapPath("~/License/Generate/" + keyFileName));
    Response.End();

代码工作正常,但我的问题是在下载弹出到屏幕后关闭新选项卡(我猜它是因为Response对象而发生),它看起来像一个bug。

我弹出一个新的空白标签1秒,然后关闭。

任何人都知道如何让它看起来更好看? 我无法在同一页面上执行此操作,因为在生成文件之后我不再与客户端建立连接(这就是我使用window.open的原因)。

1 个答案:

答案 0 :(得分:0)

您要求浏览器在另一个窗口中打开文本文件。浏览器可能将数据解释为非HTML,将文件存储到磁盘,然后关闭窗口 - 这对于浏览器来说是相当标准的。如果您不想要,则需要将HTML数据发送到浏览器或将浏览器配置为不自动将该类型的数据保存到磁盘。