我有一个用户在登录页面登录的 asp.net 应用程序。我创建了一个 Employee 对象并将 loginID 存储在该页面的 button_click 事件中。
如何在整个应用程序中保持 Employee 对象处于活动状态(不必每次都将 Employee 对象作为参数传递)?
这往往是Session State的用途,存储会话范围的项目。
将员工对象存储在会话之外可能意味着与该对象相关的用户实际上不再使用您的站点,因此将对象保存在内存中可能毫无意义。
如果你真的想要它用于整个应用程序,那么应用程序状态可能值得一看。
您可能想看看使用Session data。
这是一种让对象与给定会话关联和持久化的简单方法,但有一些警告(它可能会对性能产生影响,具体取决于您的数据存储是什么、您要持久化的对象有多大/复杂度以及并发数您正在处理的用户)。
鉴于课程是:
[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);
}
从会话中获取它。请注意,它需要转换为“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