在asp.net中下载文件后无法显示标签

我在我的asp.net项目中有一个button,点击一个Excel表格获取下载,我也想显示该文件的MD5 hash码。 应用程序工作正常,但标签没有显示,但在debugging时,散列码正在生成,它也成功地分配给标签,但它没有得到显示在前端。

请帮我解决这个问题。 我的代码看起来像这样。

 protected void btnDownload_Click(object sender, EventArgs e) { pnlHashCode.Visible = true; lblHashCode.Visible = true; string strURL = "UploadHONMarks.xls"; WebClient req = new WebClient(); pnlHashCode.Visible = true; HttpResponse response = HttpContext.Current.Response; response.Clear(); response.ClearContent(); response.ClearHeaders(); response.Buffer = true; response.AddHeader("Content-Disposition", string.Format("attachment;filename={0}", "UploadHONMarks.xls")); Response.ContentType = "Application/x-msexcel"; response.TransmitFile(Server.MapPath(strURL)); string filename = Server.MapPath("UploadHONMarks.xls"); byte[] hashBytes; MD5 md5Hash = MD5.Create(); hashBytes = md5Hash.ComputeHash(Encoding.UTF8.GetBytes(filename)); StringBuilder sBuilder = new StringBuilder(); for (int i = 0; i < hashBytes.Length; i++) { sBuilder.Append(hashBytes[i].ToString("x2")); } pnlHashCode.Visible = true; lblHashCode.Text = sBuilder.ToString(); } 

您正在发送相同的响应内容处置(用于文件下载),您也想修改网页。 这是不可能的,因为浏览器只能处理一种types的响应。

选项是:

  • 在响应中,您在页面中发送更改, 或者
  • 在响应中你发送一个文件下载

浏览器不知道如何在相同的响应中处理两种不同types的动作。 在这种情况下,最好的select是首先发送MD5哈希作为asynchronous响应,并下载链接。 例如,在诸如sourceforge.net或microsoft.com的网站中,当您下载文件时,网站会首先将您redirect到另一个页面,然后开始下载。 那是因为他们想发送两条消息(广告和下载,或者MD5和你的情况下的下载)。

另一个select是在点击响应中发送MD5并添加隐藏的链接或button文件。 所以,用MD5你可以触发一个javascript函数,在链接上点击“click”事件,下载文件。 像这样的技巧使得在相同的响应中伪造两个不同的动作成为可能。

根据你提供给我的问题的答案,这里是我的build议。 把lblHashCode.Visible = false; 下!IsPostBack检查。

  protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { lblHashCode.Visible = false; } }