0

私は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"];
            }
        }
    }

私はそれが文字列を返していることを知っています(xx値のSystem.Collections.Generic.List`1 [Person])。

オブジェクトを Page2.aspx に戻すにはどうすればよいですか?

注意: セッションは使用できません (これは制限です)。しかし、他のメカニズムは使用できますか?

ありがとう。

4

6 に答える 6

2

この状況では、Server.Transfer で HttpContext を使用できます。

http://odetocode.com/articles/111.aspx

また、クロスページポストバックでビューステートを試してください

http://www.codeproject.com/Articles/37753/Access-ViewState-Across-Pages

于 2013-03-05T06:34:35.907 に答える
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);
                    }
                }  
            }
        }
于 2013-03-05T07:32:07.340 に答える
0

Server.Transfer("Page2.aspx")の代わりにを使用Response.Redirectできる場合は、2 ページ目のオブジェクトを使用して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 オブジェクトを使用できることです。

于 2013-03-05T14:04:05.243 に答える
0

セッションを使用できない場合は、オブジェクトをシリアル化し、いくつかのストレージに保存し、ページの読み込み時にシリアル化を解除します

オブジェクトのシリアル化を参照

1-データベースにテーブルを作成します。これには、ID用(自動生成可能)とオブジェクトグラフをBLOBとして保存するための少なくとも2つの列があります

2- メモリ ストリームを使用してオブジェクトグラフをシリアル化する

3- 手順 1 で作成したテーブルにオブジェクト グラフを保存します。

4- 保存されたオブジェクトの ID を取得する

5- ID を QueryString として渡す

6- 他のページで ID を取得し、DB から objectgraph をロードし、シリアル化を解除してオブジェクトを取得します。

Application object を使用する場合、ワーカー プロセスがリサイクルされた場合に失われる可能性があり、使用することが期待できる場合は Application オブジェクトを使用しますが、不要な場合はオブジェクトを削除することを忘れないでください。

于 2013-03-05T06:23:38.480 に答える
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>;
        }
    }
}
于 2013-03-05T06:30:17.467 に答える
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"];
 }
于 2013-03-05T06:34:00.730 に答える