如何使用asp.net核心将列表对象存储在会话变量中。以及如何从View的会话变量中获取值?

时间:2019-07-01 09:41:42

标签: asp.net

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

正在尝试

HttpContext.Session.SetString("Test", listObject);

1 个答案:

答案 0 :(得分:0)

首先,您需要在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>();
    }

//此方法由运行时调用。使用此方法来配置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?}");
    });
}

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

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();
        }

您可以访问此链接以引用更多内容:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/app-state?view=aspnetcore-2.2#session-state

希望有帮助,我的朋友:))