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;
}
}