我想在两个异步请求之间共享数据到服务器。
当第一个请求中的某个会话变量值发生更改(值连续更改)时,我希望第二个请求中有更新的值。
我应该怎么做?
答案 0 :(得分:1)
如果请求是同一会话的一部分,只需使用HttpContext上的会话即可。如果没有,则将变量存储在应用程序上下文中并从那里更新/使用它。
答案 1 :(得分:0)
作为tvanfosson suggested,浏览器可能会缓存结果,因此您只能反复看到第一个结果,尤其是在使用HTTP GET而不是POST时。要避免这种情况,请将此属性应用于“进度条”操作:
[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
此外,除非在具有对Session的只读访问权限的控制器上执行“进度条”操作,否则它将被强制等待,直到异步操作完成。见Andy's answer to "ASP.NET MVC and Ajax, concurrent requests?"。这意味着您需要将进度条操作拆分为应用了此属性的单独控制器:
[SessionState(SessionStateBehavior.ReadOnly)]
总之,您的进度条操作需要如下所示:
[SessionState(SessionStateBehavior.ReadOnly)]
public class ProgressBarController : Controller
{
[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
public ActionResult ProgressBar()
{
var progress = Session["progress"];
return Json(progress, JsonRequestBehavior.AllowGet);
}
}