【问题标题】:Store List to session将列表存储到会话
【发布时间】:2010-11-18 14:21:11
【问题描述】:

是否可以在 Asp.net C# 中将列表存储到会话变量中?

【问题讨论】:

  • 请查看标签。他已经明确提到了 C# asp.net

标签: c# asp.net list session


【解决方案1】:

是的,您可以存储任何对象(我假设您正在使用具有默认设置的 ASP.NET,即进程内会话状态):

Session["test"] = myList;

您应该将其转换回原始类型以供使用:

var list = (List<int>)Session["test"];
// list.Add(something);

正如 Richard 所指出的,如果您使用需要可序列化对象的其他会话状态模式(例如 SQL Server),则应格外小心。

【讨论】:

  • 不完全正确。如果您需要使用与 proc 中默认设置不同的会话存储,则该类需要可序列化。这就是为什么最好从一开始就将您在会话中推送的任何类标记为可序列化 - 然后您可以更改机制而无需编辑代码。
  • 有效点但是 1. 如果T 是可序列化的,则List&lt;T&gt; 是可序列化的。 2.默认会话状态模式为in-proc。
  • @Mehrdad- 我明白你的意思,你有一个代码示例很好。我只是在你的答案中改写“任何对象”。
  • 对于老式的 VB.net 人:CType(Session("test"), List(of int32))
  • 我收到这样的错误:无法序列化会话状态。在“StateServer”和“SQLServer”模式下,ASP.NET 将序列化会话状态对象,因此不允许不可序列化的对象或 MarshalByRef 对象。如果自定义会话状态存储在“自定义”模式下完成类似的序列化,则适用相同的限制。
【解决方案2】:

是的。你是为哪个平台写的? ASP.NET C#?

List<string> myList = new List<string>();
Session["var"] = myList;

然后,检索:

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

【讨论】:

    【解决方案3】:

    我在Page范围之外的类文件中发现,上述方式(我一直使用的)不起作用。
    我在这个“上下文”中找到了一种解决方法,如下所示:

    HttpContext.Current.Session.Add("currentUser", appUser);
    

    (AppUser) HttpContext.Current.Session["currentUser"]
    

    否则,当我将对象指向会话对象时,编译器会期待一个字符串。

    【讨论】:

    • 我收到这样的错误:System.Web.HttpException:无法序列化会话状态。在“StateServer”和“SQLServer”模式下,ASP.NET 将序列化会话状态对象,因此不允许不可序列化的对象或 MarshalByRef 对象。如果自定义会话状态存储在“自定义”模式下完成类似的序列化,则同样的限制适用
    • 我收到'HttpContextBase' does not contain a definition for 'Current' and no extension method 'Current' accepting a first argument of type 'HttpContextBase' could be found (are you missing a using directive or an assembly reference?
    【解决方案4】:

    试试这个..

        List<Cat> cats = new List<Cat>
        {
            new Cat(){ Name = "Sylvester", Age=8 },
            new Cat(){ Name = "Whiskers", Age=2 },
            new Cat(){ Name = "Sasha", Age=14 }
        };
        Session["data"] = cats;
        foreach (Cat c in cats)
            System.Diagnostics.Debug.WriteLine("Cats>>" + c.Name);     //DEBUGGG
    

    【讨论】:

      【解决方案5】:
      YourListType ListName = (List<YourListType>)Session["SessionName"];
      

      【讨论】:

        【解决方案6】:
        public class ProductList
        {
           public string product{get;set;}
           public List<ProductList> objList{get;set;}
        }
        
        ProductList obj=new ProductList();
        obj.objList=new List<ProductList>();
        obj.objList.add(new ProductList{product="Football"});
        

        现在将 obj 分配给会话

        Session["Product"]=obj;
        

        用于检索会话。

        ProductList objLst = (ProductList)Session["Product"];
        

        【讨论】:

        • 请更正这一行 ProductList obj=new ProductList();
        • 虽然我们感谢您尝试回答问题,但一个完全解决了十年的问题实际上并不需要另一个答案,除非有突破性的变化。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-12-27
        • 2021-12-13
        • 2013-11-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多