MVC Core, behöver hjälp på traven!

Permalänk

MVC Core, behöver hjälp på traven!

Tjoho alla! Sitter och pillar med en webshop, försöker att få till att när en kund lägger väljer att trycka på "Add to shoppingcart" så skall produkträkningen öka med en, dock svarar det inget bra. Händer ingenting faktiskt. Någon som orkar kika igenom och se vad som kan vara fel?

Denna ligger i min _Layout högst upp

@using System.Net.Http @using WebShop.Utility @using Microsoft.AspNetCore.Http @inject IHttpContextAccessor HttpContextAccessor @{ int count = 0; List<Products> products = HttpContextAccessor.HttpContext.Session.Get<List<Products>>("products"); if(products == null) { products = new List<Products>(); } count = products.Count(); } ****Navmenyn _Layout(tog endast med den det gäller)**** <li class="nav-item"> <a class="nav-link text-light" asp-area="Admin" asp-controller="Product" asp-action="Index"> <i class="fas fa-shopping-cart"></i> (@count) </a> </li>

Detta är min Homecontroller

[HttpPost] [ActionName("Details")] public ActionResult Details(int? id) { List<Products> products = new(); if (id == null) { return NotFound(); } var product = _db.Products.Include(c => c.ProductTypes).FirstOrDefault(c => c.Id == id); if (product == null) { return NotFound(); } products = HttpContext.Session.Get<List<Products>>("products"); if(products == null) { products = new List<Products>(); } products.Add(product); HttpContext.Session.Set("products", products); return View(product); }

Details View med Add to shoppingcart

<div class="form-group row"> <div class="col-4"> </div> <div class="col-8"> <input type="submit" class="btn btn-primary form-control" value="Add to Shoppingcart" /> </div> <span asp-validation-for="IsAvailable" class="text-danger"></span> </div>

Detta är min SessionExtensions

public static class SessionExtensions { public static void Set<T>(this ISession session, string key, T value) { session.SetString(key, JsonConvert.SerializeObject(value)); } public static T Get<T>(this ISession session, string key) { var value = session.GetString(key); return value == null ? default(T) : JsonConvert.DeserializeObject<T>(value); } }

Hmm.. har jag missat att visa något.. Hojta till isåfall!

Permalänk
Medlem

Testa ifall du byter namn på asp-controller till "Home" istället för "Product", eftersom det verkar vara namnet på din controller. Är lite trött men där kan det ev ligga

Här alltså:
<a class="nav-link text-light" asp-area="Admin" asp-controller="Product" asp-action="Index">

Permalänk
Medlem

Eller jag tror nog mer att det ligger i ditt returvärde i controllern. Kanske bör vara products snarare än product?
Det var inget, ser nu att du använder products som HttpContext.
Kan kolla mer imorgon men skulle rekommendera att försöka dig hålla dig lite mer mot MVC och inte ha så mycket logik i din View och Controller. Kör på en service för logik istället, och en Model där Controllern plockar information från Modeln till Viewen med hjälp av servicen. Alltså att dina routes kallar på service-klassens metoder, som sedan lämnar fram till Viewen, som du kommer åt med @Model

Permalänk
Skrivet av Laktos:

Eller jag tror nog mer att det ligger i ditt returvärde i controllern. Kanske bör vara products snarare än product?
Det var inget, ser nu att du använder products som HttpContext.
Kan kolla mer imorgon men skulle rekommendera att försöka dig hålla dig lite mer mot MVC och inte ha så mycket logik i din View och Controller. Kör på en service för logik istället, och en Model där Controllern plockar information från Modeln till Viewen med hjälp av servicen. Alltså att dina routes kallar på service-klassens metoder, som sedan lämnar fram till Viewen, som du kommer åt med @Model

Hmm.. Nu ändras siffran åtminstone, la till en asp-action och kallade på metoden, på add to shoppingcart, verkar stämma än så länge.

<input type="submit" asp-action="Detail" class="btn btn-primary form-control" value="Add to Shoppingcart" />