3

ASP.NET:是否可以保留复杂的对象,例如List<object>会话?如果是,该怎么做?我试图在会话中保留一个列表,但有人告诉我我无法将该列表转换为字符串。

编辑

[Serializable]
public class Client
{
        public string ClientType { get; set; }
        public string ClientName { get; set; }
        public string SubClientName { get; set; }
        public string Project { get; set; }
        public string Service { get; set; }
        public string Activity { get; set; }
}
List<Client> ListOfClients;
protected void Page_Load(object sender, EventArgs e)
{
     if(!IsPostBack)
     {
        ListOfClients = new List<Client> { new Client()}; 
        Session["ListOfClients"] = ListOfClients;//This is where the error occurs
                                                 //Cannot convert List<Client> to string... 
     }  
}

有许多操作要执行,但想法是保留会话中客户端列表中的任何内容。

感谢您的帮助。

4

3 回答 3

9

是的,您可以将任何可序列化对象存储到会话变量中。例如:

List<string> list;

Session["list"] = list;

然后返回值:

List<string> list = (List<string>)Session["list"];
于 2012-08-14T14:59:15.903 回答
6

只要会话状态处于InProc模式,您就可以在会话对象中存储任何内容。

否则,您存储的内容必须是可序列化的。

请注意,您存储的类型是object,因此您转换了返回的引用:

ListOfClients = Session["ListOfClients"] as List<Client>;
于 2012-08-14T15:10:29.143 回答
0

由于您在评论中写道,错误发生在编译时而不是在运行时,我怀疑您还有一些名为的其他对象Session掩盖了Page.Session.

尝试将鼠标悬停在 Visual Studio 中的会话文本上。工具提示应该向您显示 Session 的类型

System.Web.SessionState.HttpSessionState

如果它显示其他内容,您需要同时搜索您的标记(.aspx 文件)和代码隐藏文件,以查看您是否使用名称/id 声明了其他内容,Session然后更改该名称/id。

于 2012-08-15T12:31:55.053 回答