【问题标题】:How to control page redirection when downloading a file in asp.net?在asp.net中下载文件时如何控制页面重定向?
【发布时间】:2021-01-14 22:23:54
【问题描述】:

我在控制页面重定向方面遇到了挑战。出于演示目的,我创建了示例代码。

这是一个简单的 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();
        }
    }

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    据我了解,您可以提供一个加载程序或一些功能,如果该过程完成,您可以检查该框。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-12
      • 1970-01-01
      • 2019-09-28
      • 1970-01-01
      • 2021-12-20
      相关资源
      最近更新 更多