【问题标题】:No postback after response.End() on button clickresponse.End() 按钮点击后没有回发
【发布时间】:2018-11-18 06:19:36
【问题描述】:

我在 Response.End(); 后没有收到回发的问题;

所以场景是我将单击一个按钮,清理一个 xml 文件并生成一条消息(输出消息),下载 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)
{

}

我在这里错过了什么?

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    你不明白的是从IIS返回浏览器只能是一个流

    在你的情况下,你相信你可以发送两个。

    究竟发生了什么?

    一个。你从网页上发回一些数据。

    B。您返回一些文件供用户下载。

    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?

    【讨论】:

    • 谢谢,我用Javascript来显示消息。工作得很好!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-28
    • 1970-01-01
    • 2013-07-09
    相关资源
    最近更新 更多