[英]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.