Asp.net HttpContext.Current.Items返回null

时间:2015-03-30 01:39:16

标签: c# asp.net

我正在测试构建一个asp.net Web应用程序。 我所拥有的是3个网页:

Default.aspx;
Home.aspx;
ThirdPage.aspx;

当用户将登录数据提交到Default.aspx时,我从db检索用户信息,将其放入类中并将其添加到Context中,如下所示

HttpContext.Current.Items.Add("UserData", userData);

然后我使用Server.Transfer将请求发送到Home.aspx。 在Home.aspx上,我有一个指向ThirdPage.aspx的链接。我点击此链接并希望此处也可以获得用户信息,但事实并非如此。我希望在我的Web应用程序中的所有页面上跨用户会话保留userdata类,直到用户会话过期。 有人可以指导一下吗? 这可能是一个初学者的问题,所以请善待。 感谢

2 个答案:

答案 0 :(得分:1)

检查ASP.NET Session State Overview

用法:

Session["UserData"] = userData;

答案 1 :(得分:0)

我不确定确切的问题是什么,但我有一些可行的解决方案。如果我没弄错的话,你试图在几页内获取用户信息?

以下是完成这项工作的一些方法:

  1. 重复您在传输数据的第一页上所做的代码 第二页并对其进行调整,使其从第二页开始工作 第三。这可能有效,但我不建议因为必须重复使用 并在每次创建新页面时调整代码。
  2. 我认为更好的方法是将您的信息写入XML文件并在会话到期时删除该文件。 您可以找到如何编写here并将其读取here
  3. 但我个人最喜欢的是拥有一个静态类。静态类可以从任何地方访问。如页面here所示。

    public static class Globals

    {
        public static String name; 
        public static int age;
    
        public void SetName(){...}
        public void SetAge(){...}
        public String GetName(){...}
        public int GetName(){...}
    }
    
    • 只需将其设为可变类(您可以使用函数更改变量),并且可以轻松地跨页面获取用户信息。

      1. 使用JSON在此处保存和加载c#函数:

    public void SaveInfo(用户用户){

    //转换为Json     string json = JsonConvert.SerializeObject(user,Formatting.Indented);

    //Write to file, you will have to create a file serverside if you want
    //if you have a 
    File.WriteAllText(@"location.json", json);
    

    }

    public void LoadUser(){         使用(StreamReader r = new StreamReader(“Location.json”))     {         string json = r.ReadToEnd();         List items = JsonConvert.DeserializeObject>(json);     }