簡體   English   中英

在asp.net中下載文件后無法顯示標簽

[英]Not able to display a label after downloading a file in asp.net

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

}

您要在同一響應中發送內容處置(用於文件下載),並且您還想修改Web頁面。 這是不可能的,因為瀏覽器只能處理一種類型的響應。

選項包括:

  • 在響應中,您發送頁面更改, 或者
  • 在響應中,您發送文件進行下載

瀏覽器不知道如何在同一響應中處理兩種不同類型的動作。 在這種情況下,最好的選擇是首先發送MD5哈希作為異步響應,並發送下載鏈接。 例如,在諸如sourceforge.net或microsoft.com之類的站點中,當您下載文件時,該站點首先將您重定向到另一個頁面,然后開始下載。 這是因為他們要發送兩條消息(廣告和下載,或者您的情況下是MD5和下載)。

另一種選擇是在點擊響應中發送MD5,並添加隱藏的鏈接或按鈕文件。 因此,使用MD5,您可以觸發一個JavaScript函數,該函數使鏈接上的“ click”事件下載文件。 這樣的技巧可以在相同的響應中偽造兩個不同的動作。

根據您提供給我的問題的答案,這是我的建議。 把lblHashCode.Visible = false; 在!IsPostBack檢查下。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM