我在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)
{
}
我在这里缺少什么?
答案 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?