我想弄清楚在会话中存储产品的简单购物车.
索引视图:
<table class="table">
<tr>
<th>
@Html.DisplayNameFor(model => model.product1)
</th>
<th></th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.product1)
</td>
<td>
@Html.ActionLink("Add products to cart", "AddToBasket", new { id=item.id})
</td>
</tr>
}
</table>
每个产品旁边是“添加到购物车”,控制器中的AddToBasket方法读取产品的ID并将其存储在会话[“购物篮”]列表中:
public ActionResult AddToBasket(int? id)
{
if (Session["Basket"] == null)
{
Session["Basket"] = new List<int>();
}
((List<int>)Session["Basket"]).Add(id.Value);
ViewBag.List = Session["Basket"];
return RedirectToAction("Index");
}
现在我将产品的ID存储在会话中,并希望从数据库中检索信息并将它们与ID匹配.这是我无法弄清楚的事情.
我试图创建字典并用值填充它,但显然这不起作用:
public ActionResult ShowBasket()
{
List<int> lista = new List<int>((List<int>)Session["Basket"]);
Dictionary<int, string> productSet = new Dictionary<int, string>();
foreach (var product in lista)
{
productSet[product] = db.products.Find(product).ToString();
}
ViewBag.products = productSet;
return View(slownik);
}
还试图让ADO.Net从数据库中检索数据但又失败了:
public ActionResult ShowBasket()
{
List<int> plist = new List<int>((List<int>)Session["Basket"]);
SqlConnection myConnection = new SqlConnection(my_connection_string);
SqlCommand myCommand;
SqlDataReader myReader;
string s;
myConnection.Open();
s = "select product from db.products where id=" + plist[0];
myCommand = new SqlCommand(s, myConnection);
myReader = myCommand.ExecuteReader();
if (myReader.Read())
{
string loaded_record = myReader.GetString("product1");
}
myConnection.Close();
return View();
}
任何人都可以帮忙吗?
我只是初学者,经过十几个小时寻找想法,我决定寻求帮助,因为我无法管理……
非常感谢您的帮助!
最佳答案 目前还不是很清楚你的问题是什么/在哪里.但是,在我看来,您从未将更新的项目列表分配回会话.
在下面的代码中,我具体说会话应该更新到更新列表.
public ActionResult AddToBasket(int? id)
{
if (Session["Basket"] == null)
{
Session["Basket"] = new List<int>();
}
var items = (List<int>)Session["Basket"];
items.Add(id.Value);
Session["Basket"] = items;
ViewBag.List = Session["Basket"];
return RedirectToAction("Index");
}
您的代码还有其他问题可以在Code Review找到帮助,请务必先阅读tour.在Stack Overflow中,我们专门研究错误.