Jaki jest Twój sposób przekazywania danych do strony wzorcowej (przy użyciu ASP.NET MVC) bez łamania reguł MVC?
Osobiście wolę kodować abstrakcyjny kontroler (kontroler bazowy) lub klasę bazową, która jest przekazywana do wszystkich widoków.
c#
.net
asp.net
asp.net-mvc
Łukasz Sowa
źródło
źródło
Odpowiedzi:
Jeśli wolisz, aby Twoje widoki miały silnie wpisane klasy danych widoku, może to zadziałać. Inne rozwiązania są prawdopodobnie bardziej poprawne, ale jest to niezła równowaga między designem a praktycznością IMHO.
Strona wzorcowa przyjmuje silnie wpisaną klasę danych widoku zawierającą tylko istotne dla niej informacje:
Każdy widok korzystający z tej strony wzorcowej przyjmuje silnie wpisaną klasę danych widoku zawierającą informacje i pochodzącą z danych widoku stron wzorcowych:
Ponieważ nie chcę, aby poszczególni kontrolerzy wiedzieli cokolwiek o łączeniu danych ze stron wzorcowych, umieszczam tę logikę w fabryce, która jest przekazywana do każdego kontrolera:
Dziedziczenie dopasowuje wzorzec, aby dobrze wyświetlać relację, ale jeśli chodzi o renderowanie części / elementów sterujących użytkownika, skomponuję ich dane widoku do danych widoku stron, np.
To jest tylko przykładowy kod i nie jest przeznaczony do kompilacji w obecnej postaci. Zaprojektowany dla ASP.Net MVC 1.0.
źródło
Wolę rozbijać elementy widoku głównego oparte na danych na części i renderować je za pomocą Html.RenderAction . Ma to kilka wyraźnych zalet w porównaniu z popularnym podejściem do dziedziczenia modelu widoku:
źródło
EDYTOWAĆ
Poniżej znajdziesz lepszą odpowiedź na to pytanie ogólne . Proszę przeczytaj to!
Oryginalna odpowiedź
Microsoft faktycznie opublikował wpis dotyczący „oficjalnego” sposobu radzenia sobie z tym problemem. Jest to przewodnik krok po kroku z wyjaśnieniem ich uzasadnienia.
Krótko mówiąc, zalecają użycie abstrakcyjnej klasy kontrolera, ale przekonaj się sam.
źródło
Abstrakcyjne kontrolery to dobry pomysł i nie znalazłem lepszego sposobu. Interesuje mnie też, co zrobili inni ludzie.
źródło
Zrobiłem trochę badań i trafiłem na te dwie strony. Może mogliby pomóc.
ASP.NET MVC Tip # 31 - Przekazywanie danych do stron wzorcowych i formantów użytkownika
Przekazywanie danych do stron wzorcowych za pomocą ASP.NET MVC
źródło
Uważam, że wspólny rodzic dla wszystkich obiektów modelu, które przekazujesz do widoku, jest wyjątkowo przydatny.
I tak zawsze będą istnieć pewne typowe właściwości modelu między stronami.
źródło
Obiekt Request.Params jest zmienny. Dość łatwo jest dodać do niego wartości skalarne w ramach cyklu przetwarzania żądania. Z perspektywy widoku te informacje mogły zostać podane w QueryString lub FORM POST. hth
źródło
Myślę, że innym dobrym sposobem mogłoby być utworzenie interfejsu do widoku z pewną właściwością, taką jak ParentView jakiegoś interfejsu, dzięki czemu można go używać zarówno do kontrolek, które wymagają odniesienia do strony (kontrola nadrzędna), jak i do widoków głównych, do których należy uzyskać dostęp z wyświetlenia.
źródło
Innym rozwiązaniom brakuje elegancji i trwają zbyt długo. Przepraszam za zrobienie tej bardzo smutnej i zubożałej rzeczy prawie cały rok później:
Więc wyraźnie mam tę statyczną metodę Get () w SiteMasterViewData, która zwraca SiteMasterViewData.
źródło