我正在开发一个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>
更进一步。
答案 0 :(得分:0)
您使用了名称&#34; winkelkar&#34;作为你的会话密钥无处不在,期待这一行:
if(Session["kar"] == null)
这意味着你永远不会找到你的对象,并且总是重新创建一个新对象。
出于这个原因,你应该避免使用字符串文字作为会话密钥,而是声明一个常量。
正如梅森在评论中指出的那样,你的表单有一个空的action
属性。你应该有类似的东西:
<form action="@Url.Action("AddToCart", "Products")" method="post">
....
</form>