2017-07-20 3 views
2

arbeite ich an meinem MVCOnlineShop Projekt, ich habe Kategorien auf der Homepage gezeigt durch ein partial viewCategoryLayout.cshtml erstellen:Action zu einer anderen Ansicht (MVC)

@model IEnumerable<MVCOnlineShop.Models.Category> 
@{ 
    ViewBag.Title = "CategoryLayout"; 
} 
<ul class="nav navbar-nav"> 
    @foreach (var Category in Model) 
    { 
     <li> 
      @Html.ActionLink(Category.CategoryName, 
"ProductList", new { Category = Category.CategoryName }) 
     </li> 

</ul> 

und habe dieses Bild in _Layout.cshtml:

@Html.Partial("CategoryLayout") 

jetzt möchte ich auf eine kategorie auf der homepage drücken, und es wird mich zu produkten in einer solchen kategorie bringen, ich habe th erstellt partial view ist ProductList.cshtml:

@model MVCOnlineShop.Models.Category 

@{ 
    ViewBag.Title = "ProductList"; 
} 
<ul> 

    @foreach (var Product in Model.Products) 
    { 
     <li> 
      @Html.ActionLink(Product.ProductName, 
"Details", new { id = Product.CategoryID }) 
     </li> 
    } 
</ul> 

und das ist mein HomeController:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 
using MVCOnlineShop.Models; 

namespace MVCOnlineShop.Controllers 
{ 
    public class HomeController : Controller 
    { 
     OnlineStoreEntities storeDB = new OnlineStoreEntities(); 
     // 
     // GET: /Home/ 

     public ActionResult Index() 
     { 
      var Categories = storeDB.Categories.ToList(); 
      return View(Categories); 
     } 
     // 
     // GET: /Home/Browse 
     public ActionResult Browse(string Category) 
     { 
      // Retrieve Category and its Associated Products from database 
      var CategoryModel = storeDB.Categories.Include("Products") 
       .Single(g => g.CategoryName == Category); 

      return View(CategoryModel); 
     } 
     // 
     // GET: /Home/Details 
     public ActionResult Details(int id) 
     { 
      var Product = storeDB.Products.Find(id); 

      return View(Product); 
     } 
     // 
     // GET: /Home/Browse?Category=Games 

     public ActionResult CategoryLayout() 
     { 
      var Categories = storeDB.Categories.ToList(); 
      return PartialView("CategoryLayout", Categories); 
     } 

    } 
} 

Frage: Wie kann ich drücke auf eine Kategorie auf der Homepage, und das wird mir die Produkte zeigt auf eine Seite, in dieser Kategorie, wie kann ich das tun?

Vielen Dank im Voraus :)

+0

Welche Probleme haben Sie mit diesem Code konfrontiert? –

+0

Sie möchten die Produkte einer bestimmten Kategorie auf derselben Seite oder auf einer anderen Seite anzeigen? –

+0

in neue andere Seite @BasantaMatia – Ahmad

Antwort

1

Here we go:

zuerst Ihre Aktionslink sollte sein:

<li> 
@Html.ActionLink(Category.CategoryName, 
"ProductList", new { CategoryId = Category.CategoryName }) 
</li> 

Und dann haben Sie ProductList Aktion in Ihrem Controller hinzuzufügen, wie :

und Ihr Produkt Teilansicht werden sollten:

@model MVCOnlineShop.Models.Category 

@{ 
ViewBag.Title = "ProductList"; 
} 
<ul> 

@foreach (var Product in Model.Products) 
{ 
<li> 
@Html.ActionLink(Product.ProductName, 
"Details", new { id = Product.CategoryID }) 
</li> 
} 
</ul> 

Prost !!

+1

ohhh es funktioniert, dankts @ LaxmanGite – Ahmad

0

Ihr Aktionslink ist falsch. Sie benötigen eine Aktionsmethode mit Parameternamen zu nennen, wie,

<li> 
    @Html.ActionLink(Category.CategoryName, 
     "MyProductDetails","YourControllerName", 
     new { id = Category.CategoryId }) 
</li> 

Hinweis: Sie können die Aktion Methodennamen in dem obigen Code ändern. Und statt KategorieName passiere ich id. Du kannst aber auch categoryName übergeben. Kein Problem.

Dann in Ihrem Action Method,

public ActionResult MyProductDetails(int? id) // If your id is not nullable then you can remove ? mark 
    { 
    List<ProductViewModel> Products = new List<ProductViewModel>(); 
    if(id!=null) 
    { 
    Products = storeDB.Products.where(m=>m.categoryId == id).ToList(); // You can fetch the product as you like 
    return View(Products); 
    } 
    else 
    return View(Products); // It will return null 
    } 

Dann können Sie die Daten in Ihrem MyProductDetails Ansicht binden.

Hoffe, es hilft :)

+0

Ich muss diese Aktionsmethode für meine Produktliste Teilansicht hinzufügen? @BasantaMatia – Ahmad

+0

Ich habe: Beschreibung: Eine nicht behandelte Ausnahme ist während der Ausführung der aktuellen Webanforderung aufgetreten. Bitte überprüfen Sie die Stack-Trace für weitere Informationen über den Fehler und wo es aus dem Code stammt. Ausnahmedetails: System.ArgumentException: Das Parameterwörterbuch enthält einen Nulleintrag für den Parameter 'ID' des Typs 'System.Int32' vom Typ Null.Für die Methode 'System.Web.Mvc.ActionResult ProductList (Int32)' in 'MVCOnlineShop. Controller.HomeController '. Ein optionaler Parameter muss ein Referenztyp, ein Nullable-Typ oder ein optionaler Parameter sein. Parametername: Parameter – Ahmad

+0

Sie müssen diese Aktionsmethode in Ihre Teilansicht ** CategoryLayout.cshtml ** schreiben, den Code, den Sie in Frage gestellt haben. Haben Sie eine ID-Eigenschaften für Kategorien oder nicht? Sie müssen das hier übergeben '@ Html.ActionLink (Category.CategoryName, " MyProductDetails "," YourControllerName ", neue {ID = Category.CategoryId})' anstelle von ** CategoryId ** nur schreiben, dass. –

Verwandte Themen