0

如果我将 xml 文件(名称-> 值)的内容存储在会话集合中,那么在另一个页面上访问它的最佳方式是什么(即不是运行以下脚本的页面)。

它只是在我要访问集合的每个页面上创建一个新的 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 

            }
4

1 回答 1

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());
}
于 2009-01-14T11:42:31.510 回答