返回重定向功能后,会话变量丢失

时间:2018-04-14 12:22:31

标签: c# asp.net-mvc mvvm session-variables asp.net-mvc-viewmodel

我有一个用于排序值的mvvm Web应用程序 用户单击sort,元素中的以下代码将其作为参数发送给控制器,刷新页面。

<a href="@Url.Action("Sort", new { area = "Area", controller = "Controller", sorter = ViewModelListSorterValue.CREATEDATE_ASC })">

这是在控制器中起作用的功能。

Public ActionResult Sort(ViewModelListSorterValue sorter)
        {
            ViewModelListSort sortViewModel = new ViewModelListSort();
            sortViewModel.Value = sorter;
            HttpContext.Session["key"] = sortViewModel;

            return RedirectToAction("List");
        }

代码应该通过在同一控制器中使用另一个函数从每个页面中的会话获取它来加载分类器的值,该控制器也使用href标记和以下行调用。

sortViewModel= HttpContext.Session["key"] as ViewModelListSort;

第一页加载正常,但是当我将其更改为第二页时,Session的变量变为null并且排序变为默认

这个代码在firefox的前几页很好用,但我在microsoft edge,explorer和google chrome中没有运气。

我也尝试过返回RedirectToAction("List", false);,但无济于事。我做错了什么?

2 个答案:

答案 0 :(得分:0)

显然,我将最大工作进程数设置为10,工作进程无法在它们之间交换信息,包括会话,我的Web应用程序使用idproc等。在应用程序池的设置中将参数设置为1解决了这个问题。

答案 1 :(得分:0)

在IIS应用程序池中设置多个工作进程是一个问题。

多个进程是彼此隔离运行的进程,默认情况下会导致会话状态共享问题。我们可以配置将会话状态存储在进程外,以便可以共享,但这是另一个故事。

关于有多少工人流程,这是权衡,应根据每个申请进行调整。

通常,作为多个工作进程运行的主要好处是用于故障隔离,因此如果一个进程发生故障,应用程序仍然可以运行。它也是阻止代码的快速解决方案,因此您可以在应用程序中实现更高级别的并发性,但代价是由于进程/线程之间的更多上下文切换而降低性能。 / p>