在整个asp.net应用程序中保持一个Employee对象存活

时间:2012-07-12 15:44:38

标签: c# asp.net oop

我有一个asp.net应用程序,用户在登录页面登录。我创建了一个Employee对象,并将loginID存储在该页面的button_click事件中。

如何在整个应用程序中保持Employee对象的活动状态(无需每次都将Employee对象作为参数传递)?

3 个答案:

答案 0 :(得分:4)

这往往是Session State的用途,存储会话范围的项目。

将员工对象存储在会话之外可能意味着该对象所涉及的用户实际上不再使用您的站点,因此将该对象保留在内存中可能毫无意义。

如果您确实想要整个应用程序,那么Application State可能值得一看。

答案 1 :(得分:2)

您可能希望了解使用Session data

这是一种简单的方法来获得与给定会话关联和持久化的对象,但有一些警告(它可能会影响性能,具体取决于您的数据存储是什么,您持久存在的对象有多大/多复杂,以及您正在处理多少并发用户。)

答案 2 :(得分:1)

鉴于课程是:

[Serializable]
public class Employee
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

将其保存到会话:

    protected void DoLogin()
    {

        Employee employee = new Employee()
        {
            Id = 1,
            FirstName = "John",
            LastName = "Smith"
        };

        // save it to session
        Session.Add("Employee", employee);
    }

从会话中获取它。请注意,需要将其强制转换为"员工":

    protected Employee GetEmployee()
    {
        if (Session["Employee"] != null)
        {
            // needs to be cast
            return (Employee)Session["Employee"];
        }
        else
        {
            return null;
        }
    }

我通常将这些东西包装成属性,以方便使用。你通常在会话中不需要像这样的对象......也许你正在寻找的是:ASP.NET MVC - Set custom IIdentity or IPrincipal