ASP.NET Core Verschachtelte Ordner

  • C# (ASP)
  • (Core) MVC

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von vb_fan.

    ASP.NET Core Verschachtelte Ordner

    Hallo zusammen,

    vielleicht hat ja jemand von euch eine Idee. Ich bin gerade dabei mich in ASP.NET Core MVC einzuarbeiten.

    Ich habe es soweit auch schon hinbekommen, wie es mit dem Controller und der View funktioniert. Nun möchte ich aber meine Controller und Views kategoriersiert anordnen und nicht einfach alle in den Ordner Controllers packen.

    Beispiel:
    Controllers/Account/LoginController.cs
    Controllers/Common/DashboardController.cs

    Diese sollen nun zu den entsprechenden Views verweisen:
    Views/Account/Login.cshtml
    Views/Common/Dashboard.cshtml


    Ich hatte es bereits hiermit probiert:

    C#-Quellcode

    1. return View("Account/login");



    Dann bekomme ich aber immer:
    InvalidOperationException: The view 'Account/login' was not found. The following locations were searched: /Views/Login/Account/login.cshtml /Views/Shared/Account/login.cshtml


    Anbei noch eine zweite Frage, kann mir Jemand erklären, wie ich eine Datei anweise, dass diese nicht die _Layout.cshtml Datei verwendet?

    LG Marvin
    Hallo

    Aber der Quellcode von dir befindet sich wenn ich dich richtig verstehen doch unter "Controllers/Account/LoginController.cs".

    Dann sollte es doch eigendlich genügen das du die View mit return View(); aufrufst.
    Was anderes wäre wenn du von wo anders aus aufrufst. Dann eher ein return RedirectToAction("Login", "Account", null);

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Vollzitat des direkten Vorposts an dieser Stelle entfernt ~VaporiZed

    Ja die Pfade stimmen, er scheint aber das Account zu ignorieren und nur im Ordner Login zu suchen.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()

    Ne, laut Fehlermeldung sucht er ja in "/Views/Login/Account/" auch.

    Aber ich denke @shad kann dir hier vielleicht besser Helfen. Mal sehen.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Wie sieht deine Ordnerstruktur denn genau aus? In deinem Beispiel oben schreibst du:

    MarvinKleinMusic schrieb:

    Beispiel:
    Controllers/Account/LoginController.cs
    Controllers/Common/DashboardController.cs

    Diese sollen nun zu den entsprechenden Views verweisen:
    Views/Account/Login.cshtml
    Views/Common/Dashboard.cshtml


    Was für mich folgende Struktur bedeutet:

    Quellcode

    1. |_ Controllers
    2. | |_ Account
    3. | | |_ LoginController
    4. | |_ Common
    5. | |_ DashboardController
    6. |_ Views
    7. |_ Account
    8. | |_ Login.cshtml
    9. |_ Common
    10. |_ Dashboard.cshtml


    Damit müsste es eigentlich out-of-the-box laufen. Das ist ja bereits (fast) ASP.NET Core Standard.
    Mich verwirrt allerdings deine Fehlermeldung. Die Pfade scheinen ja doch anders zu sein, als im Beispiel. (/Views/Login/Account/login.cshtml /Views/Shared/Account/login.cshtml)

    Prinzipiell könntest du dir mal stackoverflow.com/questions/36…en-using-custom-locations anschauen. Hier wird beschrieben, wie du das Discovern der Views anpassen kannst. Generell ist der Approach von deinem genannten Beispiel aber eigentlich ganz gut und eben auch Standard. Ich sehe wenig Gründe, das überhaupt zu ändern, denn (a) ist es bereits sehr übersichtlich, (b) wirst du dir gerade beim Lernen leichter tun, wenn deine Ordnerstruktur ähnlich zu denen ist, die auch in Anleitungen zu finden sein wird und (c) sind Standards immer gut, wenn sich andere Menschen früher oder später mit deinem Code auseinandersetzen, da man dann nicht zusätzlich zum eigentlichen Projekt noch die Hürde hat, sich in andere Strukturen einzuarbeiten. Ich spreche mich hier nicht prinzipiell gegen Feature-Ordner aus, aber ich würde sie erst einführen, wenn du sie wirklich brauchst, sprich, wenn dein Projekt eine unfassbar große, unübersichtliche Anzahl von Views/Controllern hat. Und an den Punkt muss man erstmal kommen. ;)

    MarvinKleinMusic schrieb:

    Anbei noch eine zweite Frage, kann mir Jemand erklären, wie ich eine Datei anweise, dass diese nicht die _Layout.cshtml Datei verwendet?


    Versuch mal, folgendes in deiner .cshtml, in der du das Layout nicht möchtest, einzufügen:

    Quellcode

    1. @{
    2. Layout = null;
    3. }


    Alternative
    Alternativ kannst du auch _ViewStart.cshtml ändern/löschen - dann nutzt standardmäßig keine deiner Seiten die _layout.cshtml. In diesem Fall müsstest du in jeder .cshtml in der du das Layout nutzen willst genau dieses auch anfragen:

    Quellcode

    1. @{
    2. Layout = "_Layout";
    3. }

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „shad“ ()

    Nofear23m schrieb:

    Ne, laut Fehlermeldung sucht er ja in "/Views/Login/Account/" auch.


    Ja, aber den Ordner Login gibt es ja nicht. Die Struktur ist genauso, wie Shad sie beschrieben hat.

    @shad das mit dem Layout hat schonmal funktioniert. Das andere schaue ich mir am Montag mal genauer an.

    LG
    Du musst den View im Login Controller aufgerufen haben, deshalb sucht die MVC Logik den Views/Login Ordner ab. Und dann gibtst du noch den Namen explizit an und so entsteht der Suchpfad Views/Login/Account/login. Schau dir einmal das Thema Areas an, eigentlich ist dieses Feature dafür gedacht, MVC Anwendungen zu strukturieren. Alternativ kannst du mit attribute routing ein entsprechendes Verhalten erreichen.