c# - 在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();
}
}
解决方案
据我了解,您可以提供加载程序或某些功能,如果该过程已完成,则可以选中该框。
推荐阅读
- python - 如何将引导样式添加到我的 django 表单中?
- karma-jasmine - 为什么业力什么都不显示?
- java - 如何在运行时为当前测试 ApplicationContext 注册 Spring Context Events
- java - Java - 在函数调用中包含数组声明?
- android - 从活动中的项目单击回调函数更改回收站视图项目的颜色
- python - Python dateutil 返回 YYYY-MM-DD,但我需要它反转,请帮忙?
- javascript - 使用用户输入值而不是参数
- python - 如何在 Python 中将 Dictionary 转换为 QuerySet
- npm - 更新 package.json 和 package-lock.json 中的版本号而不更新依赖项
- mongodb - Mongodb 3.2(聚合):按同一属性的多个值分组