asp.net – Response.WriteFile和Response.Redirect
我正在发布一个页面URL
例如mysite.com/disclaimer/someinfo 此页面显示协议,如果用户单击“同意”按钮,则PDF文件将作为附件进行流式处理. 这样做的目的是用户可以共享此URL,但链接后的任何其他人也必须在下载文件之前阅读协议.实际文件没有URL,但保存在服务器的其他位置,因此下载文件的唯一方法是单击“[Agree]”按钮. 然而 – 我发现很难的是,点击按钮并开始下载后,我希望页面“消失”.带按钮的页面保留在屏幕上.理想情况下,他们会被重定向回他们来自的页面.我渴望不需要javascript或cookies.引用者存储在初始页面加载到表单上的隐藏字段中. 我尝试了不同的方法,尝试在标题中写入307重定向,文件向用户发出警告,表明他们的帖子数据被重定向.我下面的代码仅适用于支持元刷新的浏览器(例如Firefox; IE7不支持Chrome / Safari) 我可以看到为什么这不起作用的逻辑.浏览器有一个响应,就是预期的文件.将文件发送给他们然后将浏览器重定向到另一个页面的正确方法是什么.感觉来自用户p.o.v.一旦他们点击按钮,这个“接受”页面就会消失. 我有: protected void Page_Load(object sender,EventArgs e) { if (Request.UrlReferrer != null & Request.UrlReferrer.ToString() != "") { Uri referrer = Request.UrlReferrer; if (!IsPostBack) { hfReferrer.Value = Request.UrlReferrer.ToString(); } } } protected void buttonAccept_Click(object sender,EventArgs e) { //stream file Node nodeCurrent = Node.GetCurrent(); string fileName = nodeCurrent.GetProperty("documentFile").Value.ToString(); System.IO.FileInfo file = new System.IO.FileInfo(fileName); if (file.Exists) //set appropriate headers { Response.Clear(); if (hfReferrer.Value !="") {Response.AddHeader("Refresh",string.Format("3; URL={0}",hfReferrer.Value));} Response.AddHeader("Content-Disposition","attachment; filename=" + file.Name); Response.AddHeader("Content-Length",file.Length.ToString()); Response.ContentType = "application/pdf"; // write file to browser Response.WriteFile(file.FullName); Response.End(); } 我不想使用javascript / pop-ups等. 理想情况下,我想遵循一个很好的标准.但我不知道在哪里看. 解决方法
我建议尝试稍微不同的行为.在buttonAccept_Click事件处理程序上,将用户重定向到感谢页面.在这个感谢页面的Page_Load中有下载文件的代码. 这很容易实现,并为用户提供更好的体验.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net core3.0 mvc 用 autofac
- asp.net – IIS web部署 – 创建虚拟目录?
- asp.net-mvc – 具有属性列表的ASP.Net MVC Html.Label?
- asp.net-mvc – ReadOnly属性在ASP.NET MVC模型中不起作用
- 开源Asp.Net主页模板
- asp.net – 使用Thinktecture Identity Server 2进行单点注
- entity-framework-4 – 首先在实体框架代码中使用导航属性
- Asp.Net会话在ashx文件中为null
- 详细介绍有关于.NET的委托
- asp.net – Ajax自动完成扩展程序并获取所选项目的ID?