我是MVC的新手。我有索引页。它向用户显示项目列表。然后,用户可以添加一个新项。在用户添加了新项之后,将为他们下载一个文件,其中包含他们添加的敏感信息。所有这些都很好但是..。
我现在的问题是如何将它们重定向回索引页以刷新项目列表?就像下载后我需要重定向一样。
注:插入下载所有工作良好。我只是想弄清楚如何在下载后重定向到另一个模型,以便刷新我的列表。
我不能先重定向,因为保存到文件中的数据是敏感的,所以我不想把它发送到任何地方。
[Authorize]
public async Task<IActionResult> Index(int clientId, string error)
{
// ....... Removed
var model = new SecretIndexModel()
{
Client = clients.Client,
ErrorMessage = error
};
return View(model);
}
在此页面上,用户可以添加新项。
[Authorize]
[HttpPost]
public async Task<IActionResult> Add(SecretIndexModel model)
{
/// removed ....
return DownloadDocument("results json string");
}
下载
public FileResult DownloadDocument(string id)
{
var ms = new MemoryStream(System.Text.Encoding.ASCII.GetBytes("abc"));
return File(ms, System.Net.Mime.MediaTypeNames.Application.Octet, "secret.json");
}
我做错了吗?我知道我需要添加这样的东西,因为如果我返回而不是下载的话,这是可行的。
return RedirectToAction("Index",
new
{
clientId = model.Client.Id,
error = (client.Errors == null)
? string.Empty
: client?.Errors?.FirstOrDefault()?.Message
});
更新:
我可以使用TempData
发送数据,但这似乎没有多大帮助,我可以刷新索引页面,但不能下载文件。
发布于 2018-04-26 04:50:58
正如@ADyson在评论中所指出的,下载和重定向是两个不同的响应,您只能返回一个响应。就我个人而言,我会返回重定向,然后简单地包含一个下载文件的链接。您可以保存到TempData
的链接URL,并将其显示为警报或吐司通知。您还可以设置一个元刷新标记来自动请求下载。例如,检查Visual下载页面。它加载一个带有链接的页面,以便在不自动启动文件的情况下下载该文件,但在一两秒钟后,您将得到一个自动下载提示。
如果您真的想更进一步,特别是如果下载需要一些时间来创建,您可以启动下载文件创建过程并立即返回重定向。然后,使用SignalR,您可以在下载实际上已经准备好时通知用户,甚至可以在那时自动下载它。这提供了一个更理想的用户体验,同样,如果下载需要一段时间来创建。而不是让用户的方式盯着一个空白的页面,他们会立即得到响应,并得到他们的下载,当它准备好了。
https://stackoverflow.com/questions/50041310
复制