如何在不使用TempData或Db的情况下在ActionMethod之间传输一些数据

时间:2013-09-27 14:38:16

标签: asp.net-mvc asp.net-mvc-4

我有一个控制器操作,当点击一个链接时,它会向用户返回一个受密码保护的zip文件。密码是随机生成的。

如果下载成功,我想在控制器上调用另一个操作方法来获取密码并将其显示在屏幕上。我很乐意在一个请求中完成所有操作,但感觉可能并不是非常糟糕。

我正在使用此库下载文件jquery download library

我不能使用tempdata或会话状态并且点击数据库感觉有点像使用锤子来破解坚果。我已经考虑将它存储在响应或cookie中,但这也感觉有些不对。

2 个答案:

答案 0 :(得分:0)

URL或隐藏字段应该这样做(也就是说,它们都是用户存储的,作为POST或GET请求的一部分)。 问题是,如何将密码返回给客户端并同时开始下载。如果没有服务器存储,则无法执行此操作,因为它们是单独的HTTP请求(除非您使用cookie)。我认为这是最好的方法:

  1. 打开下载页面,然后生成密码, 所以你可以将它放在隐藏字段中(对于jquery的successCallback) 下载库)
  2. 调用服务器下载文件时 将密码作为get或post传递给下载URL,并使用此密码 要压缩的密码
  3. 下载完成后,您就知道了什么 密码是,所以你可以重定向到另一个页面并显示它。 实际上,由于您已经在页面上拥有它,因此您可以显示它 使用javascript下载后立即。或者也许你可以展示 密码立即下载,而下载仍在进行中。
  4. 所以,这可能是你的架构的逆转。并且可能这是不可接受的(您可能希望生成安全密码并保证用户不会弄乱它们 - 如果您在下载请求中传递密码,则可能)。但这是没有服务器或cookie存储的唯一方法。

答案 1 :(得分:0)

使用         return RedirectToAction(“Action”,new {id = 99});