簡體   English   中英

asp.net下載文件時如何控制頁面跳轉?

[英]How to control page redirection when downloading a file in asp.net?

我在控制頁面重定向方面遇到了挑戰。 出於演示目的,我創建了示例代碼。

這是一個簡單的 aspx 頁面,其中包含一個按鈕和一個復選框。 單擊按鈕時,它將下載文本文件並通過 javascript 啟用復選框。單擊復選框時,它將重定向到不同的 url。

問題:在我的應用程序中,單擊按鈕后,我將從數據庫中獲取一些數據並將詳細信息發送到返回字節數組的 PDF 服務(不同的 Web 服務),然后它下載一個 PDF 文件。這個過程需要 3 到 4 秒。

有時用戶不等待下載文件。 此外,我在單擊按鈕時啟用了復選框。 他們單擊將用戶重定向到另一個鏈接的復選框。

我想確保用戶應該只重定向到不同的頁面 PDF 下載完成。 是否可以控制重定向?

aspx 代碼:-

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:LinkButton id="link" runat="server" OnClick="link_OnClick" ClientIDMode="Static">sample link</asp:LinkButton>
        <asp:CheckBox runat="server" id="chkAgree" OnCheckedChanged="chkAgree_OnCheckedChanged" ClientIDMode="Static" Text="I agree" AutoPostBack="True"/>
    </div>
    </form>
    
    
   <script type="text/javascript">
       window.onload = function() {
       var btn = document.getElementById("link");
       document.getElementById("chkAgree").checked = false;
       
       document.getElementById("chkAgree").setAttribute('disabled', true);
       btn.onclick = function(event) {
           event.preventDefault();
           document.getElementById("chkAgree").removeAttribute('disabled');
       }
       };
   </script> 
</body>
</html>

代碼隱藏文件:-

 public partial class WebForm : System.Web.UI.Page
    {
        
        protected void Page_Load(object sender, EventArgs e)
        {
           
        }

        private byte[] GetEmployeeAsByteArray()
        {
            var employee = new { id = 101, name = "steven" };
            using (var m = new MemoryStream())
            {
                using (var writer = new BinaryWriter(m))
                {
                    writer.Write(employee.id);
                    writer.Write(employee.name);
                }
                return m.ToArray();
            }
        }

        protected void chkAgree_OnCheckedChanged(object sender, EventArgs e)
        {
            Response.Redirect("https://www.google.com");
        }

        protected void link_OnClick(object sender, EventArgs e)
        {
            var emp = GetEmployeeAsByteArray();
            Response.ContentType = "text/plain";
            Response.Headers.Add("Content-Disposition", "attachment; filename=\"employee.txt\"");
            Response.BinaryWrite(emp);
            Response.End();
        }
    }

根據我的理解,您可以提供一個加載器或一些 function,如果該過程完成,它允許選中該框。

暫無
暫無

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

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