按钮点击后响应.End()后没有回发

时间:2018-06-08 08:21:54

标签: c# asp.net

我在Response.End();

之后没有收到回发的问题

所以场景是我会点击一个按钮,清理一个xmlfile并生成一条消息(输出msg),下载xml,然后在网页上的标签中显示该消息。问题是它在Response.End()之后没有做任何事情。

protected void btnDoIt_Click(object sender, EventArgs e)
{
    string xml = "exampleXml";
    string fileName = "exampleName";

    MemoryStream ms = new MemoryStream();
    string msg;
    var cleanXml = CleanXml(xml, out msg);

    cleanXml.Save(ms);
    byte[] bytes = ms.ToArray();

    Response.Clear();
    Response.AddHeader("Content-Disposition", string.Format("attachment;filename={0}.xml", fileName));
    Response.ContentType = "text/xml";
    Response.BinaryWrite(bytes);
    Response.Flush();
    Response.End();

    lblFeedback.Text = msg;
    lblFeedback.Visible = true;
}

我尝试在response.End()前面移动代码,如下所示,但由于某种原因它没有用。

protected void btnDoIt_Click(object sender, EventArgs e)
{
    string xml = "exampleXml";
    string fileName = "exampleName";

    MemoryStream ms = new MemoryStream();
    string msg;
    var cleanXml = CleanXml(xml, out msg);

    lblFeedback.Text = msg;
    lblFeedback.Visible = true;

    cleanXml.Save(ms);
    byte[] bytes = ms.ToArray();

    Response.Clear();
    Response.AddHeader("Content-Disposition", string.Format("attachment;filename={0}.xml", fileName));
    Response.ContentType = "text/xml";
    Response.BinaryWrite(bytes);
    Response.Flush();
    Response.End();
}

我还试图“点击”一个隐形按钮来获得如下的回发。也没用。

protected void btnDoIt_Click(object sender, EventArgs e)
{
    string xml = "exampleXml";
    string fileName = "exampleName";

    MemoryStream ms = new MemoryStream();
    string msg;
    var cleanXml = CleanXml(xml, out msg);

    InvisibleButtonClick(msg)

    cleanXml.Save(ms);
    byte[] bytes = ms.ToArray();

    Response.Clear();
    Response.AddHeader("Content-Disposition", string.Format("attachment;filename={0}.xml", fileName));
    Response.ContentType = "text/xml";
    Response.BinaryWrite(bytes);
    Response.Flush();
    Response.End();
}

private void InvisibleButtonClick(string msg)
{
    lblXmlFeedback.Text = msg;
    lblXmlFeedback.Visible = true;
    InvisibleButton_OnClick(new object(), new EventArgs());
}

protected void InvisibleButton_OnClick(object sender, EventArgs e)
{

}

我在这里缺少什么?

1 个答案:

答案 0 :(得分:3)

您不理解的是从IIS返回浏览器只能是一个流

在您的情况下,您认为可以发送两个。

究竟发生了什么?

<强> A 即可。您从网页上发回一些数据。

<强>乙即可。您将从用户返回一些文件以供下载。

<强> C 即可。流结束和关闭 - 没有任何东西进入浏览器了。因此页面无法重新排版,并且页面上的数据无法更改,因为您不再向页面发送任何内容。

如何解决这个问题。

a )您可以创建一个下载文件的处理程序,并且只在页面中提供一个链接,指向下载数据的处理程序的链接。

b )您可以使用您要发送的邮件重新定位他的其他页面,并自动使用一些javascript开始下载您的文件。

c )您可以使用ajax下载额外数据,并使用javascript来显示任何消息

类似的答案

What is the best way to download file from server
file download by calling .ashx page
Updating a page before initiating a download?