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...
}
}
要执行许多操作,但其目的是保留会话中客户列表中的任何内容。
感谢您的帮助。
答案 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