MVC将项添加到会话并在视图中显示

时间:2017-01-06 15:25:51

标签: asp.net asp.net-mvc session

我正在开发一个ASP.NET网上商店,但我被困在一个特定的部分。每当用户(未登录)将CD或DVD添加到购物车时,我都会尝试创建会话。这样他们就可以去购物车(/ shopping_cart)看看他们添加的所有产品。

但是,我无法使其发挥作用。每当我点击'添加产品'什么都没发生。

这是我的代码:

的ProductsController:

// POST: Producten/Details/9
    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult AddToCart(int id)
    {
        Product p = db.Producten.Find(id);
        if (p != null)
        {
            Models.Winkelkar kar;

            if(Session["kar"] == null)
            {
                kar = new Models.Winkelkar();
            }else
            {
                kar = (Models.Winkelkar)Session["winkelkar"];
            }
            kar.AddProduct(p);

            Session["winkelkar"] = kar;
            //var products = Session["kar"] as List<Product>;

        }
        return View();
    }

我的Models.Winkelkar看起来像这样:

 public partial class Winkelkar
{
    private List<Product> _List = new List<Product>();

    public List<Product> GetList()
    {
        // geeft een lijst van pbjecten terug
        return _List;
    }

    public void AddProduct(Product p)
    {
        _List.Add(p);
    }


}

我的观看表格如下:

<form action="" method="post>
      @Html.AntiForgeryToken()
    <input type="hidden" name="id" value="@Model.ID" />
    <input type="submit" name="toevoegen" value="Toevoegen" />
</form>

现在,我尝试在同一页面上显示会话,我知道它可以运行后将其移至/ shopping_cart,但我尝试将其显示为:

@Session["winkelkar"]

我已经在这里查看了许多其他解决方案,但似乎没有任何效果。

修改

如下所述,我的表格中没有动作。我改成了:

<form action="@Url.Action("AddToCart", "Producten")" method="POST">
    ...
</form>

更进一步。

1 个答案:

答案 0 :(得分:0)

您使用了名称&#34; winkelkar&#34;作为你的会话密钥无处不在,期待这一行:

if(Session["kar"] == null)

这意味着你永远不会找到你的对象,并且总是重新创建一个新对象。

出于这个原因,你应该避免使用字符串文字作为会话密钥,而是声明一个常量。

正如梅森在评论中指出的那样,你的表单有一个空的action属性。你应该有类似的东西:

<form action="@Url.Action("AddToCart", "Products")" method="post">
    ....
</form>