【问题标题】:ListBox shows System.Collection.ArrayList [closed]ListBox 显示 System.Collection.ArrayList [关闭]
【发布时间】:2013-03-31 02:08:27
【问题描述】:

我在一个页面上有一个列表框,它将列表框中的项目带到另一个页面上的另一个列表框中,但是当第二个列表框显示“System.Collection.ArrayList”时。

第1页:

protected void btnCheckout_Click(object sender, EventArgs e)
{

    Session["Name"] = NameText.Text;
    Session["PhoneNumber"] = PhoneTextBox.Text;
    Session["Address"] = AddressText.Text;
    Session["Email"] = emailText.Text;
    Session["City"] = cityTextBox.Text;
    ArrayList al = new ArrayList();
    for (int i = 0; i < ItemListBox.Items.Count; i++)
    {
        if (ItemListBox.Items[i].Selected == true)
        {
            al.Add(ItemListBox.Items[i].Value);
        }
    }
    Session["selectedValues"] = al;
    Response.Redirect("Invoice.aspx");

}

第2页:

protected void Page_Load(object sender, EventArgs e)
{
    string phoneNumber = (string)(Session["PhoneNumber"]);
    string homeAddress = (string)(Session["Address"]);
    string name = (string)(Session["Name"]);
    string email = (string)(Session["Email"]);
    string city = (string)(Session["City"]);
    phoneLabel.Text = phoneNumber;
    addressLabel.Text = homeAddress;
    nameLabel.Text = name;
    emailLabel.Text = email;
    cityLabel.Text = city;
    invoiceListBox.Items.Add(Session["selectedValues"].ToString());
}

所有其他标签会话都可以工作,只有列表框不工作

【问题讨论】:

  • 你想用Session["selectedValues"].ToString()完成什么?

标签: c# asp.net arraylist listbox


【解决方案1】:

这是因为您将集合的 toString() 结果(字符串)添加为单个项目。

改用.AddRange

【讨论】:

  • 他也没有添加arraylist,而是一个字符串:Session["selectedValues"].ToString()
  • 哦,对了,忘了 .toString。我会编辑。
  • 我得到一个错误,我输入:invoiceListBox.Items.AddRange(Session["selectedValues"].ToString());
  • 从中删除 .toString()
  • invoiceListBox.Items.AddRange(Session["selectedValues"]); ^ 我现在拥有的,我仍然得到一个错误,我也尝试了 .Equals,但没有工作
【解决方案2】:

由于所有对象都存储在 object 类型的 Session 中,因此您需要将它们转换回它们的原始类型,然后才能访问它们的属性。这应该让您了解如何完成。这里的关键是ArrayList al = Session["selectedValues"] as ArrayList;

ArrayList al = Session["selectedValues"] as ArrayList;

if(al != null)
{
    foreach(var item in al)
    {
        invoiceListBox.Items.Add(new ListItem {Value = item.toString(), Text = item.toString()});
    }
}

已添加 这是一个工作示例。

default.aspx

Phone Number: <asp:TextBox ID="txtPhoneNumber" runat="server" />
    <br />
    <asp:ListBox ID="ItemListBox" runat="server" SelectionMode="Multiple">
        <asp:ListItem Value="1">One</asp:ListItem>
        <asp:ListItem Value="2">Two</asp:ListItem>
        <asp:ListItem Value="3">Three</asp:ListItem>
        <asp:ListItem Value="4">Four</asp:ListItem>
    </asp:ListBox>
    <br />
    <asp:Button ID="btnSave" runat="server" Text="Save" OnClick="btnSave_Click" />
    <br />
    <br />
    <a href="page2.aspx">Page 2</a>

default.aspx.cs

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

        }


        protected void btnSave_Click(object sender, EventArgs e)
        {
            Session["PhoneNumber"] = txtPhoneNumber.Text;

            ArrayList al = new ArrayList();

            for (int i = 0; i < ItemListBox.Items.Count; i++)
            {
                if (ItemListBox.Items[i].Selected == true)
                {
                    al.Add(ItemListBox.Items[i].Value);
                }
            }

            Session["ItemsList"] = al;
        }

    }

page2.aspx

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        Phone Number: <asp:Literal ID="litPhoneNumber" runat="server" />
        <br />
        Selected Items<br />
        <asp:Literal ID="litItemsList" runat="server" />
        <br />
        <a href="Default.aspx">Back to default.aspx</a>
    </div>
    </form>
</body>
</html>
}

page2.aspx.cs

namespace SO15888490 {
    public partial class page2 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            litPhoneNumber.Text = (string)Session["PhoneNumber"];

            ArrayList al = Session["ItemsList"] as ArrayList;
            if (al != null)
            {
                foreach (var item in al)
                {
                    litItemsList.Text += item.ToString() + "<br/>";
                }
            }
        }
    } }

【讨论】:

  • 我已经试过了,它没有显示任何错误,但它对我不起作用
  • Session["selectedValues"] as ArrayList 是否返回 ArrayListnull?如果ArrayList 是什么内容?你的价值观包含在其中吗?设置一个断点并在调试器中查看它。
  • 我会说 null,因为什么都没有发生,
  • 为什么 ArrayList 没有存储在 Session 中?
  • 您提供的代码是用于第二个列表框的吗?
猜你喜欢
  • 2014-11-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-16
  • 1970-01-01
  • 2011-07-12
  • 2017-03-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多