如果我将xml文件的内容(name - > value)存储在会话集合中,那么在另一个页面上访问它的最佳方式是什么(即不是下面脚本运行的那个)。
是否只是在我想访问集合的每个页面上创建SessionStateItemCollection的新实例?
System.Xml.XmlDocument oXmlDoc = new System.Xml.XmlDocument();
oXmlDoc.Load(Server.MapPath("xml.xml")); //load XML file
XmlNode root = oXmlDoc.DocumentElement;
SessionStateItemCollection PSess = new SessionStateItemCollection(); //session collection
for (int x = 0; x < root.ChildNodes.Count; x++) //loop through children and add to session
{
PSess[root.ChildNodes.Item(x).Name] = root.ChildNodes.Item(x).InnerText; //add xml values to session
}
答案 0 :(得分:0)
如果这是在ASP.NET中,那么我不明白为什么要创建一个新的SessionStateItemCollection对象。在这种情况下,您需要自己处理页面之间的持久性。
如果您希望从类中使用它,则ASP.NET可以通过Page的Session对象或HttpContext.Current对象提供对SessionStateItemCollection对象的访问。您可以通过Session对象将键值对存储在那里,并在后续页面上从Session对象中检索它们。
我会按如下方式重写您的代码
System.Xml.XmlDocument oXmlDoc = new System.Xml.XmlDocument();
oXmlDoc.Load(Server.MapPath("xml.xml")); //load XML file
XmlNode root = oXmlDoc.DocumentElement;
for (int x = 0; x < root.ChildNodes.Count; x++) //loop through children and add to session
{
Session[root.ChildNodes.Item(x).Name] = root.ChildNodes.Item(x).InnerText; //add xml values to session
}
您现在可以使用Session对象访问其他页面中的内容(以下代码将通过会话中的所有商店进行交互):
for (int i = 0; i < Session.Count; i++)
{
Response.Write(Session.Keys[i] + "-" + Session[i].ToString());
}