Általában egy MVC projekten a lenyíló listák kezelésére jó ha saját editor template-et hozunk létre.
Van amikor a leghasznosabb az, hogy a template maga adatokat is le tud kérni valamilyen paraméter alapján, és fel is tölti a saját lenyíló listája elemeit azokkal az adatokkal. De ez nem túl szép megoldás, nem jó ha egy template (amit néha control-nak hívok, mert hasonlót jelent) tud az adatelérésről.
Én egy olyant csináltam az imént, ami a megadott property (amihez az editor template tartozik) attribútumai alapján bindolja a dropdown-t. Úgy működik, hogy egy attribútumban meg van adva annak a lista property -nek a neve, amelyikben az adatok vannak.
Pl a LoanCountry property-hez tartozik egy SourceList="CountryList" attribútum, ez a CountryList property pedig IList típusú.
És a LoanCountry property parent ViewModel-jéből egy extension method-ban (MyDropDownListFor) ezt a listát elérjük, és fel tudjuk használni.
Az ötletet ez a bejegyzés adta, ugyan itt elnevezési konvenciót használ és függvényt hív, nekem annyiban más hogy a csodás xml attribútumozással meg tudom adni hogy honnan vegye a listát, és ez nem fv hanem egy property.
Ezt a listát egyébként automatikusan tölti. Mert minden ilyen lista úgymond "CatalogueData" típusú elemekből áll, amiben van key meg id meg displaytext stb. Ezt használjuk pénznemekre, országokra stb., szótár táblákra.
Hogyan tölti automatikusan? Ez egy következő blog bejegyzés lesz, a lényege hogy fel van attribútumozva, hogy milyen katalógus adat típus (country, currency stb), és az összes ilyen listán végigmegyek a ViewModel-ben reflection-el, és a megadott attribútumokból paramétert gyártva meg tudom hívni a controllerből a facade függvényt, ami a megfelelő listát adja vissza. Ezzel töltöm ki majd a lenyílót.
Ezt a listát pedig a fent említett editor template ismeri (az attribútumnak köszönhetően amit xml-ben adunk meg), és automatikusan összerakja magát. Cool.
Nincsenek megjegyzések:
Megjegyzés küldése