2012-10-25 9 views
13

Pracuję nad projektem ASP.NET MVC 3. Chcę podzielić kontrolery, modele i widoki w podfolderach, ze względu na prostotę. Mogę to zrobić za pomocą kontrolerów i modeli, ale kiedy utworzę widok, automatycznie tworzy on folder główny Views, Czy istnieje sposób na rozwiązanie tego problemu?Dodawanie widoków w podfolderach w ASP.NET MVC 3

np. Mogę tworzyć

klasę modelu jak

Models/Finance/Bank.cs 
Models/Finance/Finance.cs 
Models/Production/Production.cs 

kontroler jak

Controllers/Finance/BankController/Create 
Controllers/Finance/BudgetController/Create 
Controllers/Production/ProcessController/Create 

ale gdzie próbowałem stworzyć widok dla powyższych działań, to tworzy się w celu,

Views/Bank/Create.aspx 
Views/Budget/Create.aspx 
Views/Process/Create.aspx 

Chcę, żeby było jak,

Views/Finance/Bank/Create.aspx 
Views/Finance/Budget/Create.aspx 
Views/Prodution/Process/Create.aspx 

Czy istnieje sposób na utworzenie widoków w tym samym podfolderze, jak ten utworzony dla kontrolerów i modeli? dzięki!

+0

Coś tu jest nie tak. 'CustomerController' nie powinien potrzebować dwóch folderów. –

Odpowiedz

17

Modele i kontrolery są skompilowanymi plikami źródłowymi. Są one wkompilowane w bibliotekę DLL i jako takie można je dosłownie umieścić w dowolnym miejscu projektu i nie ma to znaczenia. Te klasy nie mają pojęcia o swojej lokalizacji w systemie plików, ponieważ nie istnieją w systemie plików po kompilacji.

Widoki z drugiej strony są różne. Są to pliki tekstowe, które są wdrażane na serwerze, a następnie ładowane i analizowane w czasie wykonywania, dlatego struktura musi wiedzieć, gdzie je znaleźć.

Oprzyrządowanie zawsze tworzy widoki w folderze ~ \ Views \ Controller (lub ~ Areas \ AreaName \ Controller). Możesz przenieść je w dowolne miejsce po tym, ale będziesz musiał podać całą ścieżkę folderu do metody View() (w tym .cshtml). Lub będziesz musiał zaimplementować niestandardowy ViewEngine, który ustawia ścieżki wyszukiwania tam, gdzie chcesz.

0

Wyświetlany widok: Zgodnie z nazwą kontrolera, należy postępować zgodnie z regułą.
Jeśli chcesz utworzyć Views/Admin/Create, twój CustomerController.cs powinien otrzymać nazwę AdminController.cs.

+2

Jak to się przekłada na podkontrolery? Na przykład. 'Widoki/Admin/Klienci/Utwórz', gdzie mam kontroler' AdminController' i 'CustomersController'. – Dan

21

następujące kroki pracował dla mnie,

  1. Tworzenie podfolderów, jak chcesz w Views (folder główny). w moim przypadku było to finansowanie & Produkcja.

  2. Po prostu przeciągnij automatycznie utworzone foldery w Views w odpowiednie podkatalogi.w moim przypadku Bank & Budget do Finance i Process do Production

  3. Podczas powrotu widok z akcji kontrolera, podać pełną ścieżkę widzenia jako,

    returnView("~/Views/Finance/Bank/Create.aspx")

    returnView("~/Views/Finance/Budget/Create.aspx")

    returnView("~/Views/Production/Process/Create.aspx")

+3

to właśnie zasugerował @Mystere Man, nie ma powodu, aby napisać kolejną odpowiedź, po prostu zaznacz swoją odpowiedź jako zaakceptowaną –

+1

To zadziałało również dla brzytwy cshtml. przykład: "return View (" ~/Views/SomeSubFolder/Login.cshtml "); – granadaCoder

Powiązane problemy