ASP.NET:是否可以保留复杂的对象,例如list<>是会议?

时间:2012-08-14 14:55:44

标签: asp.net session-state

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

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

感谢您的帮助。

3 个答案:

答案 0 :(得分:9)

是的,您可以将任何serializable object存储到会话变量中。例如:

List<string> list;

Session["list"] = list;

然后返回值:

List<string> list = (List<string>)Session["list"];

答案 1 :(得分:6)

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

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

请注意,您存储的内容类型为object,因此您可以转换您获得的引用:

ListOfClients = Session["ListOfClients"] as List<Client>;

答案 2 :(得分:0)

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

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

System.Web.SessionState.HttpSessionState

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