列表框中另一页(会话)之间的双值(并排).我需要文本+值在页面之间的列表框(可变会话)

本文关键字:之间 列表 会话 文本 并排 一页 | 更新日期: 2023-09-27 18:01:57

大家好,

对不起,我有个小问题。有2页。在一个页面通过按钮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");
    }
}

否则,这些文本+值不在列表框的下方,而是"并列"。有更有经验的人吗?谢谢大家。

列表框中另一页(会话)之间的双值(并排).我需要文本+值在页面之间的列表框(可变会话)

问题是您将Text和Value粘合成一行中的单个字符串:kolekce.Add(i.Text + i.Value) .

你有两个选择:
1)使用不同的集合存储一个KeyValuePair,所以你可以保持"键"answers"值"分开

2)将值一起添加到单个字符串中(如您现在所做的),但使用分隔符(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循环之后,一次就足够了)
然后你需要这个来读取它:

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");
}

为什么不以您想要的方式添加它们,而不是在事实之后尝试这样做呢?

违约。aspx功能:

    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);
                }
                Session.Clear();
            }
        }
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        ListItem newItem = new ListItem("123456", "Jan Novak");
        ListBox1.Items.Add(new ListItem(newItem.Text + newItem.Value, newItem.Value));
    }
    protected void Button3_Click(object sender, EventArgs e)
    {
        ListItemCollection kolekce = new ListItemCollection();
        foreach (ListItem i in ListBox1.Items)
        {
            kolekce.Add(i);
        }
        Session["Session"] = kolekce;
        Response.Redirect("page2.aspx");
    }
}
所以page2

。aspx功能:

    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);
                }
                Session.Clear();
            }
        }
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        ListItem newItem = new ListItem("987654", "John Smith");
        ListBox1.Items.Add(new ListItem(newItem.Text+newItem.Value, newItem.Value));
    }
    protected void Button3_Click(object sender, EventArgs e)
    {
        ListItemCollection kolekce = new ListItemCollection();
        Session.Clear();
        foreach (ListItem i in ListBox1.Items)
        {
            kolekce.Add(i);
        }
        Session["Session"] = kolekce;
        Response.Redirect("Default.aspx");
    }
}