2009-01-08 9 views
8

Pracuję nad projektem ASP.NET MVC, gdy używam routingu do tworzenia przyjaznych adresów URL i mam problem, którego nie jestem pewien, jak najlepiej rozwiązać.ASP.NET MVC - Czy zwracanie różnych widoków z pojedynczego działania kontrolera jest złym pomysłem?

Routing Mam prace konfiguracja jak na poniższym

{kategoria}

{kategoria}/{producent}

{kategoria}/{producent}/{product}

Problem polega na tym, że chcę wyświetlać mecze na tej samej trasie w różny sposób. na przykład

category1 Wyświetla

  • opis następnie
  • obraz następnie
  • Listę Produktów

kategorii 2 Wyświetla

  • obraz następnie
  • Gorące obserwowani przez
  • Opis

Mam okrągłe to przez mającą ViewTemplate enum skojarzony z kategorii, a następnie powrót pogląd o tej samej nazwie, ale to nie w porządku, po pierwsze dlatego, Nie jestem pewien, czy powinienem logować się w ten sposób w działaniu kontrolera, a także nadal wykonuję te same wywołania bazy danych, co jest dobre dla niektórych rzeczy, ale jeśli kategoria ma 500 produktów, wciąż wyciągam je z bazy danych nawet dla kategorii 2 kiedy nie będą używane. Teraz do rzeczy:

  1. Czy zwraca różne widoki z tej samej akcji kontrolera?
  2. Jak radzić sobie z ładowaniem różnych danych dla każdego widoku?
  3. Jeśli się mylę (co myślę, że jestem) Jak powinienem robić coś takiego?

Dzięki za pomoc.

Odpowiedz

8

Nie jestem tu guru, ale w innych frameworkach MVC robiłem (i widziałem) podobne rzeczy. Zadaniem kontrolera jest ustalenie, który widok jest zwracany w zależności od tego, kto pyta, o co pyta itp. Sposób, w jaki określa się nazwę widoku, zależy w istocie od tego, co jest najlepsze dla aplikacji i/lub jej modyfikowalności/testowalności.

5

w MVC jest odpowiedzialnością kontrolerów, aby zdecydować, który widok powrócić, i tak jest zupełnie normalne mieć kontroler, który zwraca wiele różnych widoków. Kontrolery powinny być stosunkowo proste. Powinni przyjąć polecenie od klienta. Uzyskaj dostęp do modelu, aby rozpocząć wszelkie zmiany, które trzeba wprowadzić. Uzyskaj dane z modelu. I użyj tych danych, aby zdecydować, który widok pokazać klientowi.

W tej sytuacji myślę, że odpowiednim rozwiązaniem dla kontrolera, aby zrobić to:

  1. uzyskać ogólne informacje o produkcie.
  2. Skorzystaj z tych ogólnych informacji, aby zdecydować, którego widoku użyć.
  3. Uzyskaj dane dla tego widoku.
  4. Zwróć widok.

Myślę, że jeśli obawiasz się, że robisz coś złego, musisz się upewnić, że model zawiera tylko metody mające sens w kontekście domeny. Nie powinny one być zbyt ściśle związane z konkretnym spojrzeniem. na przykład Product.GetDataForMiniProductView (int id) jest błędne, to powinna być logika kontrolera. z drugiej strony Product.GetStockCount zdecydowanie powinien być w modelu, a nie kontrolera.

Powiązane problemy