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

时间:2015-05-07 18:53:13

标签: c# asp.net excel

我的asp.net项目中有一个按钮,点击excel表后,我还要显示该文件的MD5 hash代码。应用程序工作正常,但标签没有显示,但在调试时,哈希代码生成并且它也成功分配给标签,但它没有显示在前端。

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

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();

}

2 个答案:

答案 0 :(得分:0)

您在同一回复中发送内容处置(用于文件下载),并且您还想修改网页。这是不可能的,因为浏览器只能处理一种类型的响应。

选项包括:

  • 在回复中,您会在页面中发送更改
  • 在回复中,您发送文件进行下载

浏览器不知道如何在同一响应中处理两种不同类型的操作。在这种情况下,最好的选择是首先发送MD5哈希作为异步响应,以及下载的链接。例如,在sourceforge.net或microsoft.com等网站中,当您下载文件时,网站会首先将您重定向到另一个页面,然后开始下载。这是因为他们想要发送两条消息(广告和下载,或MD5和您的情况下的下载)。

另一种选择是在点击响应中发送MD5并添加隐藏的链接或按钮文件。因此,使用MD5,您可以触发一个javascript函数,使&#34; click&#34;链接上的事件,下载文件。像这样的技巧可以在同一个响应中伪造两个不同的动作。

答案 1 :(得分:-1)

根据您提供给我的问题的答案,这是我的建议。放在 lblHashCode.Visible = false;在!IsPostBack检查。

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