我正在 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 方法时并没有实际显示其前端。它只是从另一个页面的后端下载文件。
感谢 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
}