Válí se ti projekty v šuplíku? Dostaň je mezi lidi a získej cool tričko a body na profi IT kurzy v soutěži ITnetwork summer 2017!
Přidej si svou IT školu do profilu a najdi spolužáky zde na síti :)

Diskuze: ASP.NET MVC - View z více tabulek

C# .NET .NET (C# a Visual Basic) ASP.NET MVC - View z více tabulek American English version English version

Aktivity (1)
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í
+1 bodů
Řešení problému
Nahoru Odpovědět  +1 21.4.2016 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:21.4.2016 10:54

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

Nahoru Odpovědět  +1 21.4.2016 10:54
No hope, no future, JUST WAR! For world peace Israel must be DESTROYED!
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! For world peace Israel must be DESTROYED!
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
Marian Benčat
Redaktor
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  +1 21.4.2016 13:13
"C# 3.0 (2007) volal Java 8 (2014), že chce svoje featury zpět"
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
Marian Benčat
Redaktor
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
"C# 3.0 (2007) volal Java 8 (2014), že chce svoje featury zpět"
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
Redaktor
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
"C# 3.0 (2007) volal Java 8 (2014), že chce svoje featury zpět"
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! For world peace Israel must be DESTROYED!
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  +4 21.4.2016 22:19
Avatar
Marian Benčat
Redaktor
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
"C# 3.0 (2007) volal Java 8 (2014), že chce svoje featury zpět"
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.