2012-10-25 19 views
13

Ich arbeite an ASP.NET MVC 3-Projekt. Ich möchte Controller, Modelle und Ansichten aus Gründen der Einfachheit in Unterordner unterteilen. Ich bin in der Lage, es mit Controllern und Modellen zu tun, aber wenn ich eine Ansicht erstellen, erstellt es automatisch Stammordner Views, gibt es eine Möglichkeit, dieses Problem zu lösen?Hinzufügen von Ansichten in Unterordnern in ASP.NET MVC 3

z. Ich kann

Modellklasse wie

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

Controller wie

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

erstellen, aber wo ich versuchte Ansicht für über Maßnahmen zu schaffen, schafft es in zu,

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

Ich möchte, dass es so sein sollte,

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

Gibt es eine Möglichkeit, Ansichten in demselben Unterordner zu erstellen, der für Controller und Modelle erstellt wurde? Vielen Dank!

+0

Etwas stimmt hier nicht. Der 'CustomerController' sollte nicht zwei Ordner benötigen. –

Antwort

17

Modelle und Controller sind kompilierte Quelldateien. Sie werden in eine DLL kompiliert und können somit buchstäblich überall im Projekt platziert werden und es wird keinen Unterschied machen. Diese Klassen haben kein Konzept ihrer Position im Dateisystem, da sie nach der Kompilierung nicht im Dateisystem existieren.

Ansichten sind auf der anderen Seite unterschiedlich. Sie sind Textdateien, die auf dem Server bereitgestellt und zur Laufzeit geladen und geparst werden. Daher muss das Framework wissen, wo es sie finden kann.

Das Tool erstellt die Ansichten immer im Ordner ~ \ Views \ Controller (oder ~ Areas \ AreaName \ Controller). Sie können sie danach beliebig verschieben, aber Sie müssen den gesamten Ordnerpfad der View() -Methode (einschließlich .cshtml) zuweisen. Oder Sie müssen eine benutzerdefinierte ViewEngine implementieren, die die Suchpfade an den gewünschten Stellen einstellt.

0

Ansichtsname ist Je nach Name des Controllers sollten Sie der Regel folgen.
Wenn Sie es erstellen möchten Views/Admin/Create, dann Ihre CustomerController.cs sollte AdminController.cs benannt werden.

+2

Wie übersetzt sich das zu Subcontrollern? Z.B. 'Views/Admin/Customers/Create' wo ich einen' AdminController' und einen 'CustomersController' Subcontroller habe. – Dan

21

folgende Schritte für mich gearbeitet,

  1. erstellen Unterordner, wie Sie in Views (Stammordner) möchten. In meinem Fall war es Finanzen & Produktion.

  2. Ziehen Sie einfach automatisch erstellte Ordner in Views in die entsprechenden Unterordner.in meinem Fall Bank & Budget um Finance und Process um Production

  3. Während Sie eine Ansicht von Controller-Aktion zurückkehren, geben vollständigen Pfad der Ansicht wie

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

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

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

+3

das ist, was @Mystere Man vorgeschlagen, es gibt keinen Grund, eine andere Antwort zu schreiben, markieren Sie einfach seine Antwort als akzeptiert –

+1

Es funktionierte für Rasierer cshtml als gut. Beispiel: "return View (" ~/Views/SomeSubFolder/Login.cshtml "); – granadaCoder

Verwandte Themen