NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
Michal Štěpánek:21.4.2016 8:43

Ahoj, pomalu se prokousávám MVCčkem a rád bych věděl, jak se správně řeší zobrazení dat z více tabulek. Např. mám objednávku (1.tabulka - datumy, jména...) a v ní položky(2.tabulka - sortiment zboží). Ve WebForms se toto dá řešit naprosto triviálně (alespoň mě to tak připadá), ale tady jsou pohledy vázané na kontrolery a modely... Napadlo mě, že by se třeba měl udělat nějaký layout té objednávky - něco na způsob _Layout.cshtml ve složce Shared (zatím nevím jak?) a v něm by se zobrazovaly jednotlivé položky. Nerad bych se naučil špatný způsob, tak bych se rád zeptal, jak se to má správně řešit? Děkuji za odpovědi...

Odpovědět
21.4.2016 8:43
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
vajkuba1234
Člen
Avatar
Odpovídá na Michal Štěpánek
vajkuba1234:21.4.2016 10:52

Toto resi prave ViewModel, ktery se pouziva jako prepravka dat mezi pohledem a modelem. Viewmodel obsahuje presne to, co obsahuje samotny pohled a v kontroleru to uz namapujes na jednotlive modely, treba pres automapper a nebo rucne.

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
21.4.2016 10:52
No hope, no future, JUST WAR!
Avatar
vajkuba1234
Člen
Avatar
Odpovídá na Michal Štěpánek
vajkuba1234:21.4.2016 10:54

Navic, viewmodel se ma vyuzivat porad... Do view se nemaji cpat samotne modely(tabulky).

Nahoru Odpovědět
21.4.2016 10:54
No hope, no future, JUST WAR!
Avatar
Odpovídá na vajkuba1234
Michal Štěpánek:21.4.2016 11:21

Ano, původní moje myšlenka byla špatná, po chvíli gůglení jsem zjistil, že se to takto asi nedělá. Trošku mě matou pojmy model, viewmodel, jaký je mezi tím rozdíl? A Jak by měl v mém případě ten viewmodel vypadat, resp. jaké položky by měl obsahovat?

Nahoru Odpovědět
21.4.2016 11:21
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
vajkuba1234
Člen
Avatar
Odpovídá na Michal Štěpánek
vajkuba1234:21.4.2016 11:25

Model predstavuje tabulku v DB a viewmodel predstavuje prepravku dat mezi View a Modelem. Do ViewModelu dat vlastnosti, ktere budes potrebovat ve View - nic vic a nic min. Radeji ti poslu odkaz, kde to bude lepe vysvetlene:

www.mikesdotnetting.com/article/188/view-model-design-and-use-in-razor-views
http://www.dotnetportal.cz/clanek/8479/asp-mvc-from-zero-to-hero-4-MVC-architektura-view-viewmodel-controller-razor
Nahoru Odpovědět
21.4.2016 11:25
No hope, no future, JUST WAR!
Avatar
Odpovídá na vajkuba1234
Michal Štěpánek:21.4.2016 11:38

Ten článek jsem již četl, ale jsme z něj srnec, daněk, jelen a v podstatě většinu toho jsem nepochopil...

Nahoru Odpovědět
21.4.2016 11:38
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Odpovídá na Michal Štěpánek
Marian Benčat:21.4.2016 13:13

http://www.dotnetportal.cz/…roller-razor

Vsak jsi to cetl jiz tady. Nebo jsi to z toho nepochopil? (k tve otazce v komentarich, dalsi dil bude tuto sobotu - namotivoval jsi me to dopsat)

Nahoru Odpovědět
21.4.2016 13:13
Totalitní admini..
Avatar
Odpovídá na Marian Benčat
Michal Štěpánek:21.4.2016 13:25

Čtu ho již po několikáté, ale já jsem takový věčný začátečník a než něco pochopím, tak mi to trvá...

Nahoru Odpovědět
21.4.2016 13:25
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Odpovídá na Michal Štěpánek
Marian Benčat:21.4.2016 14:50

Tak se mi ozvi na facebooku a proberem to

Nahoru Odpovědět
21.4.2016 14:50
Totalitní admini..
Avatar
Odpovídá na Marian Benčat
Michal Štěpánek:21.4.2016 15:42

Knihu xichtů nepoužívám. Ten článek jsem četl asi 5x a zatím to vypadá, že se budu muset vrátit zpátky k webforms, bo toto nedávám... Jednoduché zobrazení z jedné tabulky je OK, ale toto ani omylem... Vůbec netuším, jak by ten ViewModel měl vypadat, kam ho umístit a jak z něj udělat Controller a pak to výsledné View...

Editováno 21.4.2016 15:43
Nahoru Odpovědět
21.4.2016 15:42
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Marian Benčat:21.4.2016 16:18

Tak mi napis prost tady do zrpav, co presne potreubujes realizovat a co chces vysvetlit.

Nahoru Odpovědět
21.4.2016 16:18
Totalitní admini..
Avatar
Odpovídá na Marian Benčat
Michal Štěpánek:21.4.2016 16:34

Mám tabulky (ObjToner, PolObjToner, Tonery, Stav, AspNetUsers) a chtěl bych ve View zobrazit detail Objednávky (autor, datum, stav...) a jednotlivé položky(toner, popis, barva...) viz. obrázek
Teď to mám ve webforms, tam je to prosté...

Editováno 21.4.2016 16:34
Nahoru Odpovědět
21.4.2016 16:34
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
vajkuba1234
Člen
Avatar
Odpovídá na Marian Benčat
vajkuba1234:21.4.2016 20:53

No take se uz nemuzu dockat dalsiho dilu. :)

Nahoru Odpovědět
21.4.2016 20:53
No hope, no future, JUST WAR!
Avatar
Lako
Člen
Avatar
Odpovídá na Michal Štěpánek
Lako:21.4.2016 22:19

Jo.
MVCčko je u malých projektů hrozný kanón na vrabce, takže se ti při učení může zdát, že se spousta věcí dělá uplně zbytečně. Nicméně to je takto - vemu to trochu obšírněji, ten nadhled je třeba.

Máš Model - což je vlastně jenom překopčená struktura databáze, tak abys s ní mohl pomocí EF šikovně pracovat. V modelu by se ti nemělo objevit nic víc, než struktura těch dat a maximálně nějaká validace..
To je ok ne?

Pak máš View- které zobrazuje data a přijímá requesty a posílá je do kontroleru. Z těch jednoduchý tutoriálů by se mohlo zdát, že na jeden Model připadne jedno View - to tak ale vůbec není.

ViewModel je pak slepenec z různých modelů + věci, které potřebuješ jinak než jsou v modelu (třeba celé jméno jako složenina z křestního a příjmení, nebo nějaká bool hodnota, když chci vytvořit checkbox u výběru)... No a to je přesně věc, kterou musíš použít.

V controleru vytvoříš objekt viemodelu, nasypeš tam data z modelu a pošleš do view... Controler je vlastně takový blbeček, který dělá jenom výše popsanou akci, nějakou větší logiku máš buď ve viewmodelu, nebo ve speciálních servisách zase uplně někde jinde.

Best practice je mít pro každé view jiný viewmodel. Což vypadá jakou spousta zbytečných souborů, ale věř mi - vyplatí se to.

 
Nahoru Odpovědět
21.4.2016 22:19
Avatar
Marian Benčat:21.4.2016 23:21

jak napsal Lako.. je to proste tak.. musis proste presypat data z modelu (vetsinou entity z EF) do viewmodelu a poslat do view.. a zase naopak.. pri postu to z viewmodelu rozsekat do entit..

Nahoru Odpovědět
21.4.2016 23:21
Totalitní admini..
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 15 zpráv z 15.