在两个IActionresult中共享一个列表

时间:2018-08-16 08:26:14

标签: c# asp.net-core-mvc asp.net-core-2.1

下面是我的代码

#pragma multi_compile_instancing

在索引IActionResult中,我正在调用方法GetBranchWiseList(),该方法大约需要30秒才能运行,而在GetMemberList IActionResult中,我再次需要相同的数据,因此必须再次运行此方法

所以现在在这里,而不是在GetMemberList()中再次运行此方法 我想将其存储在全局列表中

这将给我带来一个好处,列表将在Index()中填充一次,而无需从GetMemberList()中的数据库中再次获取(将在两种Action方法中共享全局列表)

为此,我声明了一个全局列表

private readonly IConfiguration configuration;
    private readonly IHostingEnvironment env;
    private readonly IActionContextAccessor actionContextAccessor;
    private utility util;

    public GeneratePDFController(IConfiguration _configuration, IHostingEnvironment _env, IActionContextAccessor _actionContextAccessor)
    {
        configuration = _configuration;
        env = _env;
        actionContextAccessor = _actionContextAccessor;
        util = new utility(_configuration, _env);
    }

    public IActionResult Index()
    {
        IndusIndVM model = new IndusIndVM();
        try
        {
            util.DeleteFolders();
            util.CreateFolders(HttpContext.Session.GetString("UserID"));
            model.BranchList = GetBranchWiseList();
        }
        catch (Exception ex)
        {
            TempData["Msg"] = ex.Message;
        }
        finally
        {
        }
        return View(model);
    }

    public IActionResult GetMemberList(string BranchCode)
    {
        IndusIndVM model = new IndusIndVM();
        try
        {
            Parallel.Invoke(
                            () => { model.BranchList = GetBranchWiseList(); },
                            () => { if (BranchCode != null) { model.MemberList = GetMemberWiseList(BranchCode); } }
                        );
        }
        catch (Exception ex)
        {
            TempData["Msg"] = ex.Message;
        }
        finally
        {
            TempData["BranchCode"] = BranchCode;
        }
        return View("Index", model);
    }

和构造函数

 private List<PendingListBranchWise> BL;

然后在Index()中将列表存储到其中

 BL = new List<PendingListBranchWise>();

现在在GetMemberList()

 model.BranchList = GetBranchWiseList();
 BL = model.BranchList;

但是BL在这里是空的,我也尝试使该列表也是静态的,但是对于GetMemberList()它的值也是空的,在TempData中存储也不是一个好选择

如何保留此列表并在ActionMethods中使用它?

1 个答案:

答案 0 :(得分:1)

有多种方法可以实现此目的: 1.将[OutputCache(-)]属性用于Index方法,这样就不必每次都调用它,    它将返回缓存的结果。 2.将列表存储在应用程序会话中。 3.将此列表存储在全局变量中。