我知道有类似标题的主题,但这有点不同。
首先,为了在单个会话中存储多个值,我必须使用List
,而我将列表中的值存储在会话中,对吧?
如果是这样,当我想向List中添加一个已经在会话中的值时,我会从会话中检索List并添加该值。但是,每次添加/删除List
中的值时,是否需要将列表分配回会话?或者,默认情况下,当我操作它时会在会话中自动更新它,因为它是在会话中首先分配的,之后是。
更新:提供我的问题的示例代码
public void assignNewID(int currentID)
{
if(Session["usersID"] == null)
{
Session["usersID"] = new List<int>();
}
if(currentID != null)
{
var list = (List<int>)Session["usersID"];
list.Add(currentID);
// now should I hereby assign the list back to
// the session like:
// Session["usersID"] = list;
// or it gets automatically updated in the session by default ?
}
}
答案 0 :(得分:7)
List
是一种引用类型,因此您将reference
存储到会话中,如果对象更新,将会更新
答案 1 :(得分:4)
这里有一个问题。
您的代码没问题,无需重新分配列表(不是那样会有很多麻烦)。
但只要你在1服务器(<sessionstate mode="inproc" />
)上运行它。
如果您将其扩展到多个服务器,则会遇到List<>
未标记为[Serializable]
的问题。您的解决方案不会直接起作用。
一个简短的解决方法是使用:
[Serializable]
class MyList : List<int>
{
}
答案 2 :(得分:2)
试试这个:
// Saving in session
System.Collections.Hashtable ht = new System.Collections.Hashtable();
ht.Add("EmployeeName", "EmpName Value");
ht.Add("Designation", "Designation Value");
ht.Add("Department", "Department Value");
Session["EmployeeInfo"] = ht;
//Retrieve from session
if (Session["EmployeeInfo"] != null)
{
string strEmployeeName = ht.ContainsKey("EmployeeName") ? Convert.ToString(ht["EmployeeName"]) : "";
string strDesignation = ht.ContainsKey("Designation") ? Convert.ToString(ht["Designation"]) : "";
string strDepartment = ht.ContainsKey("Department") ? Convert.ToString(ht["Department"]) : "";
}
答案 3 :(得分:0)
参见此示例
public static class SessionManager
{
public static List<Entity.Permission> GetUserPermission
{
get
{
if (HttpContext.Current.Session["GetUserPermission"] == null)
{
//if session is null than set it to default value
//here i set it
List<Entity.Permission> lstPermission = new List<Entity.Permission>();
HttpContext.Current.Session["GetUserPermission"] = lstPermission;
}
return (List<Entity.Permission>)HttpContext.Current.Session["GetUserPermission"];
}
set
{
HttpContext.Current.Session["GetUserPermission"] = value;
}
}
}
现在无论如何
protected void chkStudentStatus_CheckedChanged(object sender, EventArgs e)
{
Entity.Permission objPermission=new Entity.Permission();
SessionManager.GetUserPermission.Add(objPermission);
SessionManager.GetUserPermission.RemoveAt(0);
}