Avatar
Michal Štěpánek:

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. dubna 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:

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í
+1 bodů
Řešení problému
Nahoru Odpovědět  +1 21. dubna 10:52
No hope, no future, JUST WAR! For world peace Israel must be DESTROYED!
Avatar
vajkuba1234
Člen
Avatar
Odpovídá na Michal Štěpánek
vajkuba1234:

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

Nahoru Odpovědět  +1 21. dubna 10:54
No hope, no future, JUST WAR! For world peace Israel must be DESTROYED!
Avatar
Odpovídá na vajkuba1234
Michal Štěpánek:

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. dubna 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:

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. dubna 11:25
No hope, no future, JUST WAR! For world peace Israel must be DESTROYED!
Avatar
Odpovídá na vajkuba1234
Michal Štěpánek:

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. dubna 11:38
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Marian Benčat
Redaktor
Avatar
Odpovídá na Michal Štěpánek
Marian Benčat:

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  +1 21. dubna 13:13
Avatar
Odpovídá na Marian Benčat
Michal Štěpánek:

Č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. dubna 13:25
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Marian Benčat
Redaktor
Avatar
Odpovídá na Michal Štěpánek
Marian Benčat:

Tak se mi ozvi na facebooku a proberem to

 
Nahoru Odpovědět 21. dubna 14:50
Avatar
Odpovídá na Marian Benčat
Michal Štěpánek:

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. dubna 15:43
Nahoru Odpovědět 21. dubna 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
Redaktor
Avatar
Marian Benčat:

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

 
Nahoru Odpovědět 21. dubna 16:18
Avatar
Odpovídá na Marian Benčat
Michal Štěpánek:

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. dubna 16:34
Nahoru Odpovědět 21. dubna 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:

No take se uz nemuzu dockat dalsiho dilu. :)

Nahoru Odpovědět 21. dubna 20:53
No hope, no future, JUST WAR! For world peace Israel must be DESTROYED!
Avatar
Lako
Člen
Avatar
Odpovídá na Michal Štěpánek
Lako:

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  +4 21. dubna 22:19
Avatar
Marian Benčat
Redaktor
Avatar
Marian Benčat:

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. dubna 23:21
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.