在 Razor Pages 的 OnPost 中使用浏览器下载文件后更改页面

问题描述 投票:0回答:1

我正在 Razor Pages 中提交表单。 OnPost 方法创建一个 MemoryStream 并将数据作为文件返回。但是在此之后,我想将用户带到一个页面,显示“感谢您使用此服务来创建您的文件”。由于“返回文件”是 OnPost 方法执行的最后一件事,因此我无法更改此后的页面。如有任何帮助,我们将不胜感激。

public ActionResult OnPost()
{
  this.date = Request.Form["date"];
  this.name = Request.Form["name"];
  this.lastname = Request.Form["lastname"];

  string filename = "HelloWorld.docx";
  string contenttype = "application/vnd.openxmlformats-officedocument.wordprocessingml.document";

  var stream = new MemoryStream();

  // **************************
  // Creating the document here 
  // **************************

  return File(stream, contenttype, filename);
}

Word文档创建良好,下载没有任何问题。但之后我无法更改页面。我可以不返回而下载文件,以便之后可以使用“RedirectToPage”吗?

我尝试将表单提交到另一个页面。但是,执行另一个页面的 OnPost 方法时并没有实际显示其前端。它只是从另一个页面的后端下载文件。

asp.net razor-pages documentformat
1个回答
0
投票

感谢 Dave B 提出使用两个不同页面的想法。这很有帮助。不过我确实以不同的方式解决了这个问题。

在第一页中我创建了一个参数。如果未设置,则显示表单。因此,在第一次访问时,它总是显示表单。

然后,当单击提交按钮时,OnPost 将表单数据保存到 TempData 并设置变量。这会触发第一页显示感谢消息而不是表单。

然后 JavaScript 将 URL 重定向到第二个页面,该页面在 OnGet 方法中创建单词文件并返回它。

<!--  1st Page Part - Thank You Message -->
@if (ViewData["message"] != null)
{
  Thank you message here 
  <script>
  window.location.href = "./PageToCreateFile";
  </script>
}

<!--  2nd Page Part - The Form -->
else
{
 form data filled here
}
© www.soinside.com 2019 - 2024. All rights reserved.