我在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);
}
在Page2.aspx中,我有
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
if (Request.QueryString["Param"] != null)
{
var xx = Request["Param"];
}
}
}
我知道,它返回一个字符串(System.Collections.Generic.List`1 [Person]表示xx值)。
如何在Page2.aspx中找回对象?
N.B.~我不能使用Session(这是一个限制)。但是其他任何机制都可以吗?
感谢。
答案 0 :(得分:2)
在这种情况下,我们可以将HttpContext与Server.Transfer一起使用
http://odetocode.com/articles/111.aspx
另外,尝试使用跨页回发的viewstate
http://www.codeproject.com/Articles/37753/Access-ViewState-Across-Pages
答案 1 :(得分:0)
如果你不能使用session,那么序列化你的对象,存储到一些存储中并在页面加载时将其序列化
1-在数据库中创建一个表,其中至少有两列用于ID(可以自动生成),另一列用于将对象图存储为BLOB
2-使用内存流
序列化对象图3-将对象图保存到步骤1中创建的表中
4-获取已保存对象的ID
5-将ID传递给QueryString
6-在其他页面上检索ID,从DB加载对象图并反序列化以获取对象。
如果使用Application对象,如果您的工作进程被回收并且如果它可以使用,那么它可能会丢失,然后使用Application对象但不要忘记在不需要时删除该对象。
答案 2 :(得分:0)
编辑:对不起。我没有读到你问题的结尾。是否可以使用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>;
}
}
}
答案 3 :(得分:0)
您可以使用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"];
}
答案 4 :(得分:0)
我们可以使用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);
}
}
}
}
答案 5 :(得分:0)
如果您可以使用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
这种方法的好处在于您可以使用任何.NET对象而无需序列化。