如何使用 ASP.NET Core 在会话变量中存储列表对象。以及如何从视图中获取会话变量的值?

Cus*_*t_1 6 asp.net

使用 asp.net core 如何创建会话变量来存储列表类型的对象以及如何从视图中检索值

尝试着

HttpContext.Session.SetString("Test", listObject);
Run Code Online (Sandbox Code Playgroud)

Tom*_*o32 11

首先,您需要在 Startup 类中添加更多配置。

public void ConfigureServices(IServiceCollection services)
    {
        services.Configure<CookiePolicyOptions>(options =>
        {
            // This lambda determines whether user consent for non-essential cookies is needed for a given request.
            options.CheckConsentNeeded = context => true;
            options.MinimumSameSitePolicy = SameSiteMode.None;
        });

        services.AddDistributedMemoryCache();                      

        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

        services.AddSession(options => {
            options.IdleTimeout = TimeSpan.FromSeconds(10);
            options.Cookie.IsEssential = true;
        });           

        services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
    }
Run Code Online (Sandbox Code Playgroud)

// 该方法由运行时调用。使用此方法配置 HTTP 请求管道。

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseDeveloperExceptionPage();
    app.UseStatusCodePages();
    app.UseStaticFiles();
    app.UseSession();
    app.UseMvc(routes =>
    {
        // Default Route
        routes.MapRoute(
            name: "default",
            template: "{controller=Home}/{action=Index}/{id?}");
    });
}
Run Code Online (Sandbox Code Playgroud)

//添加以下扩展方法来设置和获取可序列化对象:

public static class SessionExtensions
    {
        public static T GetComplexData<T>(this ISession session, string key)
        {
            var data = session.GetString(key);
            if (data == null)
            {
                return default(T);
            }
            return JsonConvert.DeserializeObject<T>(data);
        }

        public static void SetComplexData(this ISession session, string key, object value)
        {
            session.SetString(key, JsonConvert.SerializeObject(value));
        }
    }

public IActionResult Index()
        {
            List<BookingModel> data = new List<BookingModel>();

            for (int i = 1; i < 10; i++)
            {                
                BookingModel obj = new BookingModel
                {
                    BookingId = i,
                    BookingRefNo = $"00{i}",
                    FullName = $"A{i}",
                    MobileNo = $"(00)-{i}",
                    Email = $"abc{i}@gmail.com"
                };
                data.Add(obj);
            }

            HttpContext.Session.SetComplexData("loggerUser", data);
            return View();
        }

public IActionResult Privacy()
        {
            List<BookingModel> data = HttpContext.Session.GetComplexData<List<BookingModel>>("loggerUser");
            return View();
        }
Run Code Online (Sandbox Code Playgroud)

您可以访问此链接以参考更多信息:https://learn.microsoft.com/en-us/aspnet/core/fundamentals/app-state ?view=aspnetcore-2.2#session-state

希望能帮到你,我的朋友:))