ASP.net会话,是否引用?。以及如何编写包含列表的会话?

ASP.net会话,是否引用?。以及如何编写包含列表的会话?,asp.net,list,session,reference,Asp.net,List,Session,Reference,我的代码中有此属性: public List<TreeViewNodeContentHolder> NodeContentHolder { get { if (Session["NodeContainerSession"] == null) { var tempSessionVar = new List<TreeViewNodeContentHolder>

我的代码中有此属性:

public List<TreeViewNodeContentHolder> NodeContentHolder
    {
        get
        {
            if (Session["NodeContainerSession"] == null)
            {
                var tempSessionVar = new List<TreeViewNodeContentHolder>();
                Session["NodeContainerSession"] = tempSessionVar;
                return (List<TreeViewNodeContentHolder>)Session["NodeContainerSession"];
            }
            else
                return (List<TreeViewNodeContentHolder>)Session["NodeContainerSession"];
        }
    }
我也希望能够做到这一点:

var someNode = NodeContentHolder.Where(e=>e.prop1 == x).FirstOrDefault();
还有另一个问题……如果我能做这行上面的事情……我能在会话中更新对象吗

someNode.prop1 = 12345;
?

或者我必须先“拉”对象,然后将其从列表/会话中删除,然后再将其添加回以确保其得到更新


提前谢谢

您在这里所说的一切都是正确的,您在这里提到的所有列表都是通过引用保存的,如果您保持会话引用,那么会话将保存在最后一个页面卸载,因此您在列表上所做的任何更改都会反映在会话将保存的对象上

我唯一想更改您代码的是
if Session[“NodeContainerSession”]!=null不意味着这也是一个
列表
,这是您必须进行的检查

public List<TreeViewNodeContentHolder> NodeContentHolder
{
    get
    {
        object oSessionNode = Session["NodeContainerSession"] as List<TreeViewNodeContentHolder>;

        if (oSessionNode == null)
        {
            oSessionNode = new List<TreeViewNodeContentHolder>();
            Session["NodeContainerSession"] = oSessionNode;
        }

        return (List<TreeViewNodeContentHolder>)oSessionNode;
    }
}
公共列表节点所有者
{
收到
{
对象oSessionNode=会话[“NodeContainerSession”]作为列表;
if(oSessionNode==null)
{
oSessionNode=新列表();
会话[“NodeContainerSession”]=oSessionNode;
}
返回(列表)OSession节点;
}
}

Asp.net会话将保存引用。我的答案是肯定的,您不需要“…首先“拉”对象,然后将其从列表/会话中删除,然后再将其添加回…”
public List<TreeViewNodeContentHolder> NodeContentHolder
{
    get
    {
        object oSessionNode = Session["NodeContainerSession"] as List<TreeViewNodeContentHolder>;

        if (oSessionNode == null)
        {
            oSessionNode = new List<TreeViewNodeContentHolder>();
            Session["NodeContainerSession"] = oSessionNode;
        }

        return (List<TreeViewNodeContentHolder>)oSessionNode;
    }
}