Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将通用集合从一个页面传递到另一个页面?_C#_Asp.net - Fatal编程技术网

C# 如何将通用集合从一个页面传递到另一个页面?

C# 如何将通用集合从一个页面传递到另一个页面?,c#,asp.net,C#,Asp.net,我在Asp.net工作 在Page1.aspx中,我有 protected void Page_Load(object sender, EventArgs e) { List<Person> lstPerson = new List<Person>(); lstPerson.Add(new Person { Name = "N1", Age = 20 }); lstPerson.Add(new Person { Na

我在Asp.net工作

在Page1.aspx中,我有

protected void Page_Load(object sender, EventArgs e)
    {
        List<Person> lstPerson = new List<Person>();
        lstPerson.Add(new Person { Name = "N1", Age = 20 });
        lstPerson.Add(new Person { Name = "N2", Age = 30 });      

        Response.Redirect("Page2.aspx?Param=" + lstPerson);
    }
我知道,它返回一个字符串System.Collections.Generic.List`1[Person]作为xx值

如何在Page2.aspx中获取对象

注意~我不能使用session这是一个限制。但是其他机制可以吗


谢谢。

如果您不能使用会话,请序列化您的对象,存储到某个存储器中,并在页面加载时对其进行反序列化

1-在数据库中创建一个表,该表至少有2列,一列用于自动生成ID,另一列用于将对象图存储为BLOB

2-使用内存流序列化objectgraph

3-将对象图保存到步骤1中创建的表中

4-获取已保存对象的ID

5-将ID作为QueryString传递

6-在另一个页面上检索ID,从DB加载objectgraph并反序列化以获取对象

如果使用应用程序对象,如果您的工作进程被回收,那么它可能会丢失,如果它可以使用,那么请使用应用程序对象,但不要忘记在您不需要它时删除它。

编辑:对不起。我没读你问题的结尾。可以使用ViewState吗

旧答案:

您可以使用会话

protected void Page_Load(object sender, EventArgs e)
{
    List<Person> lstPerson = new List<Person>();
    lstPerson.Add(new Person { Name = "N1", Age = 20 });
    lstPerson.Add(new Person { Name = "N2", Age = 30 });      

    Response.Redirect("Page2.aspx?Param=" + lstPerson);

    Session["listOfPersons"] = lstPerson;
}
在Page2.aspx中

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        if (Session["listOfPersons"] != null)
        {
            List<Persons> personList = Session["listOfPersons"] as List<Persons>;
        }
    }
}
您可以使用应用程序将列表从一页传递到另一页

请参见此示例:

第1.aspx页

第2.aspx页

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        if (Session["listOfPersons"] != null)
        {
            List<Persons> personList = Session["listOfPersons"] as List<Persons>;
        }
    }
}

在这种情况下,我们可以将HttpContext与Server.Transfer一起使用

另外,尝试使用跨页回发查看状态


我们可以使用HTTP上下文作为

第1页

protected void Page_Load(object sender, EventArgs e)
        {
            var lstPerson = new List<Person>();
            lstPerson.Add(new Person { Name = "N1", Age = 20 });
            lstPerson.Add(new Person { Name = "N2", Age = 30 });

            Context.Items["WebForm1List"] = lstPerson;

            Server.Transfer("Page2.aspx");

        }
第2页

 protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
               var list = Context.Items["WebForm1List"] as List<Person>;

                if (list != null)
                {
                    foreach (Person s in list)
                    {
                        Response.Write(s.Name + "__" + s.Age);
                    }
                }  
            }
        }
如果可以使用Server.TransferPage2.aspx而不是Response.Redirect,则可以使用第二页上的PreviousPage对象从第一页传输数据

因此,在Page1.aspx.cs上,将List lstPerson设置为公共类字段

然后在Page2.aspx.cs中,将此代码的C等价物添加到页面加载事件处理程序中。对不起,VB,我不知道C语法:

        If Not IsPostBack Then
            If Not PreviousPage Is Nothing Then
               Dim pp As Page1 = DirectCast(PreviousPage, Page1)
               Dim lstPerson as List (of Person) = pp.lstPerson 
               ' use lstPerson as needed...
            End If
        End If

这种方法的好处在于,您可以使用任何.NET对象而无需序列化。

不,应用程序是全局的。另一个请求将覆盖人员。
 protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
               var list = Context.Items["WebForm1List"] as List<Person>;

                if (list != null)
                {
                    foreach (Person s in list)
                    {
                        Response.Write(s.Name + "__" + s.Age);
                    }
                }  
            }
        }
        If Not IsPostBack Then
            If Not PreviousPage Is Nothing Then
               Dim pp As Page1 = DirectCast(PreviousPage, Page1)
               Dim lstPerson as List (of Person) = pp.lstPerson 
               ' use lstPerson as needed...
            End If
        End If