Problem z MVC , wyciaganie szczegolow produktu z bazy danych Widok - Kontroler

Odpowiedz Nowy wątek
2018-11-18 12:28
0

Cześć napotkałem kolejny problem przy nauce MVC ( próbuję stworzyć sklep internetowy).
Mam Kontroler "ProduktyController" , gdzie za pomoca akcji Szczegoly chcę przekazać z bazy danych odpowiednie informacje o szczegółach danego produktu.

public ActionResult Szczegoly(int id)
        {

            var prod = db.Produkty.Find(id);
            return View(prod);
            //return View();
        }

Dla przykładu:
http://localhost:51643/Produkty/Szczegoly/13 ma mi pokazać informacje o danym produkcie który ma ID 13

W momencie gdy chcę wywołać taki o to link jak wyżej otrzymuję błąd:
screenshot-20181118121746.png

HomeViewModel wygląda tak:


namespace ShopApp.ViewModels
{
    public class HomeViewModel
    {
        //tworzymy 3 listy dla kategorii, nowosci i bestselerów

        public IEnumerable<Kategoria> Kategorie { get; set; }
        public IEnumerable<Produkt> Nowosci { get; set; }
        public IEnumerable<Produkt> Bestselery { get; set; }
        public IEnumerable<Produkt> KategorieMenu { get; set; }
    }
}

W widoku mam użyty
@model ShoppApp.Models.Produkty

i następnie odwołuję się za pomocą Model.NazwaProduktu itp.. do tego co mam w bazie. Na czym moze tu polegać problem? Próbowałem różne sposoby i nadal ten błąd. Poniżej linki do całego kodu

ProdukTyContext: https://4programmers.net/Pastebin/9965
Szczegoly.cshtml: https://4programmers.net/Pastebin/9966
ProduktyController: https://4programmers.net/Pastebin/9967
HomeViewModel: https://4programmers.net/Pastebin/9968

edytowany 3x, ostatnio: Dani12.95, 2018-11-18 12:33

Pozostało 580 znaków

2018-11-18 20:18
1

A nie masz czasem tak, że masz dwa pliki Szczegoly.cshtml w różnych lokalizacjach ? I w folderze Produkty/Views masz ten niewłaściwy z HomeViewModel ?

Pozostało 580 znaków

2018-11-18 21:55
0

Własnie mam tylko ten View w folderze Views/Produkty , gdzie w tym widoku mam równiez odwołanie do wyświetlenia kategorii. I one odwołują się do HomeViewModel. Może to jakoś koliduje?

Pozostało 580 znaków

2018-11-18 21:58
0
Dani12.95 napisał(a):

Własnie mam tylko ten View w folderze Views/Produkty , gdzie w tym widoku mam równiez odwołanie do wyświetlenia kategorii. I one odwołują się do HomeViewModel. Może to jakoś koliduje?

lepiej może użyć do takiego wyświetlenia szczegolow produktu PartialView ? Albo jakaś propozycja jak to najlepiej zrobić?

Pozostało 580 znaków

2018-11-18 22:06
0
Dani12.95 napisał(a):

Własnie mam tylko ten View w folderze Views/Produkty , gdzie w tym widoku mam równiez odwołanie do wyświetlenia kategorii. I one odwołują się do HomeViewModel. Może to jakoś koliduje?

No tego to już za bardzo nie rozumiem. W widoku szczegoly oprócz odwołania do Modelu masz jeszcze odwołanie do ViewModelu ? Coś namieszałeś. Pokaż cały kod widoku

edytowany 2x, ostatnio: szydlak, 2018-11-18 22:07

Pozostało 580 znaków

2018-11-18 22:32
0

W widoku masz mieć

@model ShopApp.Models.Produkt

I zwrócić obiekt typu ShopApp.Models.Produkt

Jeżeli chcesz zwracać dodatkowe rzeczy to masz kilka opcji:

  • Dodać ViewModel, który będzie zawierał produkt + dodatkowe rzeczy i zwracać ten model, a nie Produkt

  • Zwracać przez ViewData / ViewBag (mniej zalecane)

Pozostało 580 znaków

2018-11-19 00:27
0
WeiXiao napisał(a):

W widoku masz mieć

@model ShopApp.Models.Produkt

I zwrócić obiekt typu ShopApp.Models.Produkt

Czyli tak jak teraz ma.

Doczytaj do końca :> - WeiXiao 2018-11-19 00:29
Ale po co mam czytać do końca, jak dalsza część nie nawiązuje w żaden sposób do problemu? - some_ONE 2018-11-19 00:47
@some_ONE: No jak nie? gdzie w tym widoku mam równiez odwołanie do wyświetlenia kategorii. me: Dodać ViewModel, który będzie zawierał produkt + dodatkowe rzeczy i zwracać ten model, a nie Produkt czyli żeby np. to wrzucił razem do jednego VM, bo teraz najprawdopodobniej odwołuje się również do tego drugiego modelu, którego tam nawet nie wrzuca - WeiXiao 2018-11-19 00:53

Pozostało 580 znaków

2018-11-19 10:42
0
szydlak napisał(a):
Dani12.95 napisał(a):

Własnie mam tylko ten View w folderze Views/Produkty , gdzie w tym widoku mam równiez odwołanie do wyświetlenia kategorii. I one odwołują się do HomeViewModel. Może to jakoś koliduje?

No tego to już za bardzo nie rozumiem. W widoku szczegoly oprócz odwołania do Modelu masz jeszcze odwołanie do ViewModelu ? Coś namieszałeś. Pokaż cały kod widoku

https://4programmers.net/Pastebin/9966

w linku jest cały widok. Chodzi o to ze odwołuję się do @Html.Action("KategorieMenu") , które zrobiłem wcześniej i tam mam kategorie produktów.

Pozostało 580 znaków

2018-11-19 13:33
0

To nie ma znaczenie jeśli metoda KategorieMenu wysyła do widoku odpowiedni model czyli listę kategorii i ten widok ma zdefiniowaną chęć użycia takiego model @model IEnumerable<kategoria>.
Pokaz jeszcze widok _KategorieMenu a najlepiej wrzuć całość do githuba.

Na początek mi się mocno nie podoba twój HomeViewModel. Wyświetlenie kategorii, nowości itp można właśnie załatwić @Html.Action(...) w widoku Home i odpowiednimi metodami w odpowiednich kontrolerach z odpowiednimi widokami partial.

Np to public ActionResult KategorieMenu() nie powinno być w kontrolerze produktów tylko kategorii menu i wstawiasz sobie to w widokach albo layoucie za pomocą Action.

Wciśnij Ctrl+F i wyszukaj w całym projekcie HomeViewModel.

Pozostało 580 znaków

2018-11-19 13:35
0

Wytłumacz jeszcze sens tej metody z kontrolera Produkty

public ActionResult Lista(string nazwaKategorii)
        {
            var kategoria = db.Kategorie.Include("Produkty").Where(p => p.NazwaKategorii.ToUpper() == nazwaKategorii.ToUpper()).FirstOrDefault();

            var produkty = kategoria.Produkty.ToList();
            //return View(produkty);
            return View(new HomeViewModel() { KategorieMenu = produkty });
           // var prod = db.Produkty.Where(p => p.Kategoria.ToString() == nazwaKategorii);

           //return View(produkty);
        }

Pozostało 580 znaków

2018-11-19 20:55
0

ta "lista" ma za zadanie wyświetlać odpowiednie produkty z danej kategorii gdy są równe nazwie kategorii którą wybierze user klikając w dane hiperłącze. Wiem, że pewnie tam jest duzo namieszane ale dopiero co zaczynam z asp.netem także dzięki za wyrozumiałość i mam nadzieję , ze pomożecie mi rozwiązać ten problem z szczegółami produktu
Wrzuciłem na bitbuckets. Link na dole:
git clone https://[email protected]/dasch95/shop_db.git

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0