C# 如何将通用集合从一个页面传递到另一个页面?
我在Asp.net工作 在Page1.aspx中,我有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
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