基于session的C#MVC简单购物车

我想弄清楚在会话中存储产品的简单购物车.

索引视图:

<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中,我们专门研究错误.

点赞