如何从会话变量调用数据?

时间:2014-11-24 15:41:28

标签: c# asp.net session checkbox

我试图从名为' cart'的特定会话变量中读取数据。但是,当我执行下面的方法时,输出字符串是以下System.Collections.Generic.List 1 [System.String]`,而我的愿望目标是检索产品ID数据值(会话'购物车') 。

   protected void AddToCart_Click(object sender, EventArgs e)
    {
        var selectedProducts = GridView1.Rows.Cast<GridViewRow>()
          .Where(row => ((CheckBox)row.FindControl("SelectedProducts")).Checked)
          .Select(row => GridView1.DataKeys[row.RowIndex].Value.ToString()).ToList();
        if (Session["Cart"] == null)
        {
            Session["Cart"] = selectedProducts;

        }
        else
        {
            List<String> cart = new List<String>();
            cart = (List<string>)Session["Cart"];

            foreach (var product in selectedProducts)
                cart.Add(product);
            Session["Cart"] = cart;
        }
        foreach (GridViewRow row in GridView1.Rows)
        {
            CheckBox cb = (CheckBox)row.FindControl("SelectedProducts");
            if (cb.Checked)
                cb.Checked = true;

                {

                   // string data = (string)Session["Cart"];
                    List<string> cart = (List<string>)Session["Cart"];
                    Label1.Text = cart.ToString();
                }              
        }
    }

对于我可能出错的地方,任何进一步的建议都会非常感激 非常感谢。

1 个答案:

答案 0 :(得分:1)

List<T>.ToString()具有以下默认实现:

public virtual String ToString()
{
    return GetType().ToString();
}

如果要以您描述的方式使用ToString(),则需要通过覆盖(在派生类中)来提供自己的实现。

修改:假设您没有 使用ToString(),还有其他一些选项。使用Linq,您可以像这样聚合列表:

cart.Aggregate(String.Empty, (a, b) => a + ", " + b);

或者您可以将其转换为Array并使用String.Join()(正如Rick建议的那样),或者您可以为IEnumerable<String>或任何适合您目的的扩展方法实现。