我试图从名为' 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();
}
}
}
对于我可能出错的地方,任何进一步的建议都会非常感激 非常感谢。
答案 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>
或任何适合您目的的扩展方法实现。