[英]How to pass a generic collection from one page to another?
我在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中獲取對象?
NB~我不能使用Session(這是一個限制)。但是任何其他機制都可以嗎?
謝謝。
在這種情況下,我們可以將HttpContext與Server.Transfer一起使用
http://odetocode.com/articles/111.aspx
此外,嘗試使用跨頁回發的viewstate
http://www.codeproject.com/Articles/37753/Access-ViewState-Across-Pages
如果你不能使用session,那么序列化你的對象,存儲到一些存儲中,並在頁面加載時將其序列化
看到對象序列化
1-在數據庫中創建一個表,其中至少有兩列用於ID(可以自動生成),另一列用於將對象圖存儲為BLOB
2-使用內存流序列化對象圖
3-將對象圖保存到步驟1中創建的表中
4-獲取已保存對象的ID
5-將ID作為QueryString傳遞
6-在其他頁面上檢索ID,從DB加載對象圖並取消序列化以獲取對象。
如果使用Application對象,如果您的工作進程被回收,並且如果它可以表示使用,則它可能會丟失,然后使用Application對象但不要忘記在不需要時刪除該對象。
編輯:對不起。 我沒看完你的問題。 是否可以使用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
這種方法的好處是你可以使用任何.NET對象而無需序列化。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.