2

皆さんこんにちは、

お願いします、私には小さな問題があります。2 ページあります。Button1 を使用して 1 つのページで、テキストと値 ("123456"、"Jan Novak") をリストボックスに追加します。別のページ転送でリストボックスからこれらの両方の値が必要です。値が1つしかない場合は問題ありませんが、値が2つある場合、リストボックスに「ダブル」が並んでいます。

私のコードがあります。

Default.aspx

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Collections.Specialized;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

        if (!Page.IsPostBack)
        {
            if (Session["Session"] != null)
            {

                ListItemCollection hodnotyState = (ListItemCollection)Session["Session"];

                foreach (ListItem i in hodnotyState)
                {
                    ListBox1.Items.Add(i.Text + "|" + i.Value);

                }
                Session.Clear();
            }

        }
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        ListBox1.Items.Add(new ListItem("123456","Jan Novak"));
    }
    protected void Button3_Click(object sender, EventArgs e)
    {
        ListItemCollection kolekce = new ListItemCollection();

            foreach (ListItem i in ListBox1.Items)
            {

                kolekce.Add(i.Text + "|" + i.Value);

                Session["Session"] = kolekce;
            }
            Response.Redirect("page2.aspx");

    }
}        

page2.aspx

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Collections.Specialized;

public partial class page2 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

        if (!Page.IsPostBack)
        {
            if (Session["Session"] != null)
            {

                ListItemCollection hodnotyState = (ListItemCollection)Session["Session"];

                foreach (ListItem i in hodnotyState)
                {
                    ListBox1.Items.Add(i.Text + "|" + i.Value);

                }
                Session.Clear();
            }
        }
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        ListBox1.Items.Add(new ListItem("987654","John Smith"));
    }
    protected void Button3_Click(object sender, EventArgs e)
    {
        ListItemCollection kolekce = new ListItemCollection();


        Session.Clear();
            foreach (ListItem i in ListBox1.Items)
            {

                kolekce.Add(i.Text + "|" + i.Value);

                Session["Session"] = kolekce;
            }
            Response.Redirect("Default.aspx");

    }
}

それ以外の場合、これらのテキスト + 値はリストボックスの下ではなく、「横」になります。誰かがより良い経験をしていますか? 皆さん、ありがとうございました。

4

2 に答える 2

3

問題は、この行で Text と Value を 1 つの文字列に結合することです: kolekce.Add(i.Text + i.Value).

2 つのオプションがあります
。1) KeyValuePair を格納する別のコレクションを使用して、「キー」と「値」を分離しておくことができます。

2) 値を (現在行っているように) 1 つの文字列にまとめますが、区切り記号 ( kolekce.Add(i.Text + "|" + i.Value)) を使用します。そのコレクションを読み返すときは、そのセパレーターで分割して、個別のキーと値を取得します。

どちらの場合も、単一の文字列を ListBox1 に追加するのではなく、ListItem個別のキーと値を持つ新しい文字列を追加してください。

例:

次のようにリストを保存する場合:

StringCollection kolekce = new StringCollection();
foreach (ListItem i in ListBox1.Items)
{
    kolekce.Add(i.Text + "|" + i.Value);
}
Session["Session"] = kolekce;

(注:foreachループの
にセッションに保存します。1回で十分です) 次に、それを読み戻すためにこれが必要です:

if (Session["Session"] != null)
{
     StringCollection hodnotyState = (StringCollection)Session["Session"];

     foreach (string s in hodnotyState)
     {
         string[] sa = s.Split('|');
         ListBox1.Items.Add(new ListItem(sa[0], sa[1]);
     }
     Session.Remove("Session");
}
于 2013-03-05T11:51:22.570 に答える