2017-01-06 5 views
1

Я работаю в веб-магазине ASP.NET, но я застрял на определенной части. Я пытаюсь создать сеанс всякий раз, когда пользователь (не входит в систему) добавляет компакт-диск или DVD-диск в свою корзину покупок. Таким образом, они могут пойти в свою корзину (/ shopping_cart) и посмотреть все продукты, которые они добавили.MVC добавление элементов в сеансы и отображение в поле зрения

Однако я не могу заставить его работать. Всякий раз, когда я нажимаю «добавить продукт», ничего не происходит.

Вот мой код:

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"] 

Я рассмотрел многие другие решения здесь, но ничего действительно не работает.

EDIT

Как указано ниже, у меня не было действия в моей форме. Я сменил его на:

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

На шаг ближе.

+0

В вашей форме нет действия. У вас есть HTTP. Поместите свои данные в метод действий. Я предлагаю вам начать изучать некоторые базовые учебные пособия ASP.NET MVC, пока у вас не будет оснований. И почему вы отметили это как PHP? – mason

ответ

0

Вы использовали название «winkelkar» в качестве ключа сеанса везде, ожидают на этой линии:

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

Это означает, что вы никогда не найдете объект, и всегда воссоздать новый.

По этой причине вам следует избегать использования строкового литерала для ключей сеанса и вместо этого объявлять константу.

А как указал каменщик в своем комментарии, ваша форма имеет пустой атрибут action. У вас должно быть что-то вроде этого:

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

Спасибо, что указали это. На самом деле это не решило проблему, но, к сожалению :( –

+0

@ Albert.tomasiak см. Мое редактирование, это может решить вашу проблему. – Riokmij

+0

Да, я посмотрел некоторые вещи после того, как Fran указал на это, но это просто дает мне 404 ошибки .. Мой контроллер называется ProductenController, поэтому мое действие выглядит как «@ Url.Action (« AddToCart »,« ProductenController »)« Я даже попытался добавить Id к нему с помощью ..., new {id = @ Mode.ID} но это тоже не сработало. Спасибо за помощь, хотя я предполагаю, что я сделал глупую ошибку где-то :) –