首页 > 解决方案 > 如何在所有其他控制器mvc5中重用一个控制器中填充的对象

问题描述

我正在使用 MVC 应用程序。我正在使用 HomePage 控制器的 Display 操作方法中的用户相关信息更新对象的属性。HomePage/Display 是打开应用程序 url 时执行的第一个操作方法。显示操作从数据库中获取与用户相关的信息,如过去的订单、正在进行的订单等,并将这些信息填充到 userInformation 对象中。

我将此 userInformation 对象保存在会话中。

var userData = HttpContext.Current.Session["UInfo"] as userInformation;

我在所有控制器中都需要这个 userData 对象。因此,在其他控制器中,我使用会话即 HttpContext.Current.Session["UInfo"] 作为 userInformation 访问 userData 对象。但如果线程不同,则 HttpContext.Current.Session["UInfo"] 变为空。

我已经搜索了解决方案,但其中大多数是指存储简单字符串或使用 ViewModel 进行 _Layout。我知道我们可以使用 TempData..但我正在为此寻找任何更好或替代的解决方案。

我如何重用在一个控制器中初始化的对象并在所有其他控制器和视图中重用该对象

谢谢你。

标签: asp.net-mvc

解决方案


会话缓存实际上是将用户配置文件保存在内存中的更好选择,并且在用户注销或会话到期后将被释放内存。

您可以在每个控制器(或理想情况下的基本控制器)中设置一个属性,并在所有线程中使用该属性。

public class YourController : Controller
{   
    HttpContext context = HttpContext.Current;

    public ActionResult YourAction()
    {
        context.WhateverYouWant
    }
}

推荐阅读