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

C# 在asp.net中下载文件后无法显示标签,c#,asp.net,excel,C#,Asp.net,Excel,我在我的asp.net项目中有一个按钮,在单击下载的excel工作表时,我还想显示文件的MD5哈希代码。应用程序工作正常,但标签未显示,但在调试过程中,生成了哈希代码,并将其成功分配给标签,但未在前端显示 请帮我解决这个问题。我的代码看起来像这样 protected void btnDownload_Click(object sender, EventArgs e) { pnlHashCode.Visible = true; lblHashCode.Visible = true

我在我的
asp.net
项目中有一个按钮,在单击下载的excel工作表时,我还想显示文件的
MD5哈希
代码。应用程序工作正常,但标签未显示,但在调试过程中,生成了哈希代码,并将其成功分配给标签,但未在前端显示

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

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

}
protectedvoidbtndownload\u单击(对象发送方,事件参数e){
pnlHashCode.Visible=true;
lblHashCode.Visible=true;
string strURL=“UploadHONMarks.xls”;
WebClient req=新的WebClient();
pnlHashCode.Visible=true;
HttpResponse response=HttpContext.Current.response;
response.Clear();
response.ClearContent();
response.ClearHeaders();
response.Buffer=true;
AddHeader(“Content Disposition”,string.Format(“attachment;filename={0}”,“UploadHONMarks.xls”);
Response.ContentType=“应用程序/x-msexcel”;
TransmitFile(Server.MapPath(strURL));
字符串文件名=Server.MapPath(“UploadHONMarks.xls”);
字节[]哈希字节;
MD5 md5Hash=MD5.Create();
hashBytes=md5Hash.ComputeHash(Encoding.UTF8.GetBytes(filename));
StringBuilder sBuilder=新StringBuilder();
for(int i=0;i
根据您对我的问题的回答,以下是我的建议。把 lblHashCode.Visible=false;在下面我是回邮支票

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

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

这些选择包括:

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


另一个选项是在单击响应中发送MD5,并添加隐藏的链接或按钮文件。因此,使用MD5可以触发javascript函数,在链接上生成“单击”事件,从而下载文件。像这样的技巧可以在同一个响应中伪造两个不同的操作。

是否在代码的其他位置设置lblHashCode.Visible=false?尤其是页面加载事件?是的。。在页面加载中。。。因为我希望标签在页面加载时不可见。我现在明白这是原因,但现在请告诉我如何解决该问题。在这种情况下,请将“lblHashCode.Visible=false”置于“not post back”复选框下。因此,在btnDownload_Click postback.protected void Page_Load(对象发送方,EventArgs e){DataTable dtBatch;if(!IsPostBack){pnlModule.Visible=false;pnlHashCode.Visible=false;lblFA.Text=“FA1”;lblHashCode.Visible=false;}