3

我知道有类似标题的主题,但这有点不同。

首先,为了在单个会话中存储多个值,我必须使用 aList而我将列表与会话中的值一起存储,对吗?

如果是这样,当我想向已经在会话中的列表添加一个值时,我会从会话中检索列表并添加该值。但是每次我添加/删除一个值时,我是否需要将列表分配回会话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 ?
    }
}
4

4 回答 4

7

List 是一种引用类型,因此您将 a 存储reference到会话中,如果对象更新,该会话将被更新,

会话为引用类型更新

于 2013-08-26T08:28:02.023 回答
4

这里有一个问题。

你的代码没问题,不需要重新分配列表(不是那会很麻烦)。

但只要您在 1 个服务器 ( <sessionstate mode="inproc" />) 上运行它。

如果将其扩展到多台服务器,您将遇到List<>未标记为的问题[Serializable]。您的解决方案不会直接起作用。

一个简短的解决方法是使用:

[Serializable]
class MyList : List<int>
{
}
于 2013-08-26T08:40:57.547 回答
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"]) : "";
            }
于 2013-08-26T08:39:52.857 回答
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);


    }
于 2013-08-26T08:23:13.063 回答