如何将泛型集合从一个页面传递到另一个页面
本文关键字:一个 另一个 泛型 集合 | 更新日期: 2023-09-27 18:02:08
我在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);
}
在第二页。aspx,我有
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
if (Request.QueryString["Param"] != null)
{
var xx = Request["Param"];
}
}
}
我知道,它返回一个字符串(System.Collections.Generic)。
我怎么能得到对象返回Page2.aspx?
注意:~我不能使用Session(这是一个限制)。还有其他的机制吗?
谢谢。
在这种情况下,我们可以在Server中使用HttpContext。转移
http://odetocode.com/articles/111.aspx另外,尝试viewstate与跨页面post back
http://www.codeproject.com/Articles/37753/Access-ViewState-Across-Pages如果你不能使用会话,那么序列化你的对象,存储到一些存储,并在页面加载时反序列化
参见对象序列化
1-在数据库中创建一个表,该表至少有2列,其中一列用于ID(可以自动生成),另一列用于存储对象图BLOB
2-使用内存流
序列化对象图3-将对象图保存到步骤1中创建的表中
4-获取保存对象的ID
5-传递ID为QueryString
6-在其他页面检索ID,从DB加载objectgraph并反序列化以获得对象。
如果使用应用程序对象,它可能会丢失,如果你的工作进程回收,如果它是可预期的使用,那么使用应用程序对象,但不要忘记删除对象,当你不需要它。
编辑:我很抱歉。我没有读到你问题的结尾。是否可以使用ViewState?
老答:
可以使用Session
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>;
}
}
}
您可以使用Application
将列表从一个页面传递到另一个页面
请看下面的例子:
page1 . aspx发布地址就
List<Person> lstPerson = new List<Person>();
lstPerson.Add(new Person { Name = "N1", Age = 20 });
lstPerson.Add(new Person { Name = "N2", Age = 30 });
Application.Add("Persons", lstPerson);
Response.Redirect("Page2.aspx");
Page2.aspx
if (Application["Persons"] != null)
{
List<Person> lstPerson = (List<Person>)Application["Persons"];
}
我们可以使用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.Transfer("Page2.aspx")
而不是Response.Redirect
,那么您可以在第二页上使用PreviousPage
对象来从第一页传输数据。
所以在Page1.aspx.cs中,将List<Person> lstPerson
设置为公共类字段
然后在Page2.aspx.cs中,将此代码的c#等效添加到您的Page_Load
事件处理程序中(对不起,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