Как вы работаете с SessionStateItemCollection в C # (ASP.net) - PullRequest
0 голосов
/ 14 января 2009

Если я храню содержимое 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 

            }

1 Ответ

0 голосов
/ 14 января 2009

Если это в ASP.NET, тогда я не понимаю, зачем вам создавать новый объект SessionStateItemCollection. В этом случае, так как вам нужно справиться с сохранением этого между страницами самостоятельно.

ASP.NET предоставляет доступ к объекту SessionStateItemCollection через объект Session объекта Page или объект HttpContext.Current, если вы хотите использовать его из класса. Вы можете хранить там пары ключей и значений через объект 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());
}
...