ASP.NET MVC problem med att hämta specifika produkter ifrån en kategori

Permalänk

ASP.NET MVC problem med att hämta specifika produkter ifrån en kategori

Håller just nu på att försöka skapa en webbutik men har fastnat när jag ska hämta alla produkter som tillhör en viss kategori.

Mitt felmeddelande är att sekvensen innehåller inga element på var categoryModel = db.Category.Include("Product")
Vad tror ni att felet kan vara, vad har jag missat? Har just nu inga problem med att få fram alla kategorier som länkar och kan göra CRUD på mina produkter men så fort jag trycker på en kategorilänk så kraschar applikationen.
Säg till om ni vill se något annat än det jag har skrivit in här.

StoreController.cs

public ActionResult Browse(string category) { var categoryModel = db.Category.Include("Product") .Single(c => c.CategoryType == category); return View(categoryModel); }

Browse.cshtml

@model OnlineStore.Models.Category @{ ViewBag.Title = "Browse"; } <h2>Browsing Category: @Model.CategoryType</h2> <ul> @foreach (var product in Model.Product) { <li> @product.Title </li> } </ul>

Index.cshtml

@model IEnumerable<OnlineStore.Models.Category> @{ ViewBag.Title = "Index"; } <h2>Store</h2> <ul> @foreach (var category in Model) { <li> @Html.ActionLink(category.CategoryType, "Browse", new { category.CategoryType }) </li> } </ul>

Product.cs

namespace OnlineStore.Models { [MetadataType(typeof(Metadata_Product))] public partial class Product { public class Metadata_Product { public int ProductID { get; set; } public int CategoryID { get; set; } public int MakerID { get; set; } [Display(Name="Namn")] public string Title { get; set; } [Display(Name = "Pris")] public decimal Price { get; set; } [Display(Name = "Beskrivning")] public string Description { get; set; } public virtual Category Category { get; set; } public virtual Manufacturer Manufacturer { get; set; } } } }

Category.cs

namespace OnlineStore.Models { [MetadataType(typeof(Metadata_Category))] public partial class Category { public class Metadata_Category { public int CategoryID { get; set; } [Display(Name = "Kategori")] public string CategoryType { get; set; } public virtual ICollection<Product> Product { get; set; } } } }

Visa signatur

CPU: AMD Ryzen 7 7800X3D
Ram: Kingston 32GB DDR5 6000MHz
GPU: XFX Radeon RX 6800 XT MERC 319
Operativsystem: Windows 11

Permalänk
Avstängd

Eventuellt exception hjälper

edit: Sorry såg att du lagt med det, Single förväntar sig ett element och inget annat. DU får använbda FirstOrDefault eller SingleOrDefault

Sedan så ändra Include("Product") till Include(c => c.Product)
Att skriva databaskod direkt i Mvc controllers skulle jag inte rekommendera

Visa signatur
Permalänk
Skrivet av CyberVillain:

Eventuellt exception hjälper

edit: Sorry såg att du lagt med det, Single förväntar sig ett element och inget annat. DU får använbda FirstOrDefault eller SingleOrDefault

Sedan så ändra Include("Product") till Include(c => c.Product)
Att skriva databaskod direkt i Mvc controllers skulle jag inte rekommendera

Japp ändrade till SingleOrDefault och ladde till en @if (Model != null) i Browser.cshtml men då fick jag en tom sida.
Problemet var att parameternamnet i .Single(c => c.CategoryType == category); var fel och inte matchade URL variablen och category skulle istället vara .Single(c => c.CategoryType == CategoryType );
Så problemet är nu löst och det funkar som det ska.

Visa signatur

CPU: AMD Ryzen 7 7800X3D
Ram: Kingston 32GB DDR5 6000MHz
GPU: XFX Radeon RX 6800 XT MERC 319
Operativsystem: Windows 11