C# 下载后重定向

C# 下载后重定向,c#,asp.net-mvc,asp.net-core-mvc,C#,Asp.net Mvc,Asp.net Core Mvc,我是MVC新手。我有一个索引页。它向用户显示项目列表。然后,用户可以添加一个新项目。用户添加新项目后,将为他们下载一个包含他们添加的敏感信息的文件。 所有这些都很好,但是 我现在的问题是如何将它们重定向回索引页以刷新项目列表?下载后我几乎需要重定向 return RedirectToAction("Index", new { clientId = model.Client.Id, error = (client.Err

我是MVC新手。我有一个索引页。它向用户显示项目列表。然后,用户可以添加一个新项目。用户添加新项目后,将为他们下载一个包含他们添加的敏感信息的文件。 所有这些都很好,但是

我现在的问题是如何将它们重定向回索引页以刷新项目列表?下载后我几乎需要重定向

return RedirectToAction("Index",
       new
          {
           clientId = model.Client.Id,
           error = (client.Errors == null)
                   ? string.Empty
                   : client?.Errors?.FirstOrDefault()?.Message
          });
注:插入下载所有作品即可。我只是想弄清楚如何在下载后重定向到另一个模型,以便刷新我的列表

我不能先重定向,因为保存到文件中的数据很敏感,所以我不想将其发送到任何地方

[Authorize]
public async Task<IActionResult> Index(int clientId, string error)
    {
     // ....... Removed
     var model = new SecretIndexModel()
        {
            Client = clients.Client,
            ErrorMessage = error
        };
        return View(model);
    }
我做错了吗?我知道我需要添加这样的内容,因为如果我返回该内容而不是下载内容,那么它就可以工作

return RedirectToAction("Index",
       new
          {
           clientId = model.Client.Id,
           error = (client.Errors == null)
                   ? string.Empty
                   : client?.Errors?.FirstOrDefault()?.Message
          });
更新:


我可以使用
TempData
发送数据,但这似乎没有多大帮助,我可以刷新索引页,但不下载文件。

正如@ADyson在评论中所述,下载和重定向是两种不同的响应,您只能返回一个响应。就个人而言,我会返回重定向,然后简单地包含一个下载文件的链接。您可以将链接URL保存到
TempData
,并将其显示为警报或toast通知。您还可以设置元刷新标记以自动请求下载。例如,请检查。它加载一个带有链接的页面以下载文件,以防文件无法自动启动,但一两秒钟后,您会收到一个自动下载提示

return RedirectToAction("Index",
       new
          {
           clientId = model.Client.Id,
           error = (client.Errors == null)
                   ? string.Empty
                   : client?.Errors?.FirstOrDefault()?.Message
          });

如果您真的想把它做得更远,特别是如果下载需要一些时间来创建,您可以启动下载文件创建过程并立即返回重定向。然后,使用signar,您可以在下载实际就绪时通知用户,甚至在该点自动下载。同样,如果下载需要一段时间才能创建,这将提供更理想的用户体验。与其让用户盯着空白页面看,他们会立即收到响应,并在响应准备好后下载。

使用iframe或ajax谢谢您的响应,但我不能使用ajax或iframe。重定向和下载是两种完全不同的响应类型,这就是为什么不能在一个响应中同时发送它们的原因。您可以使用一些JavaScript使下载URL在单独的选项卡中打开,同时将主页的位置更改为新的URL。你不能做的一件事是等待下载完成后再做,因为那不在你视图的上下文中,所以Javascript看不到那个事件,这是一个完全独立的HTTP请求,由浏览器单独处理。我试图避免使用JavaScript,但这可能是一个很好的解决方案。如果有什么不清楚的地方,如果无法将文件保存在服务器上,这是敏感数据,因此链接不会被删除,那么向下投票人是否介意评论我乐意根据需要改进问题的原因工作这是一个包含客户端id和密码的非常小的文件。您不需要保存该文件。将文件创建分解为单独的操作。像平常一样保存帖子中的信息,然后简单地返回文件创建操作的URL,其中包含一个id或它可以用来检索信息以创建文件的内容。谢谢,这很有效,它不是';这正是我所希望的。我希望我做错了什么。但这是一个非常优雅的解决方案