Laden...

MVC - Organisierung von View Folder & Ajax über mehrere Controller

Erstellt von Regenwurm vor 10 Jahren Letzter Beitrag vor 10 Jahren 2.443 Views
R
Regenwurm Themenstarter:in
295 Beiträge seit 2008
vor 10 Jahren
MVC - Organisierung von View Folder & Ajax über mehrere Controller

Hallo zusammen,

Wir sind dabei ein grösseres Projekt mittels dem MVC Prinzip zu entwickeln.
Es stellt sich die Frage inwiefern man mittels dem MVC den View Ordner organisieren kann.
Grundsätzlich ist es ja so dass alle Views in dem View Ordner sind.
Ist es jedoch quasi möglich dass man innerhalb des Orderns noch weitere Unterordner erstellen kann und der Controller trotzdem noch begreift wie was abläuft?
Beispielsweise die Ordner Mitarbeiter und Gruppen:

MVC  
-- /Views  
 -- /Home  
   -- Default.aspx  
 -- Verwaltung  
   -- Default.aspx  
   -- /Mitarbeiter  
     -- Edit.aspx  
     -- View.aspx  
   -- /Gruppen  
      -- Edit.aspx  
      -- foo.aspx  
  -- Einstellungen  

Ich bin auf sogenannte 'Areas' gestossen (Using areas in ASP.NET MVC to organize a project).
Funktioniert ein wenig anders als mein oben genannter Ansatz, aber sieht schon einmal gut aus.
Wäre dies der richtige Ansatz dafür?

Nebenbei soll die Webapplikation mit purem Ajax funktionieren.
Sprich die Seite soll niemals neugeladen werden.
Wäre es also möglich aus der einen Seite (welche mit Controller X) verbunden ist, ein View reinzuladen welches auf Controller Y basiert?

Ein bisschen schwer zu erklären, sorry.
Aber ich hoffe ihr versteht was ich zu Fragen probiere.

Besten dank & Gruess,
Regenwurm

ServiceStack & Angular = =)

16.842 Beiträge seit 2008
vor 10 Jahren

Hi,

erst mal zum Grundlegenden: pures Ajax ist suboptimal. Wieso? Es ist nicht barrierefrei.
Jemand der Javascript deaktiviert hat kann mit eurer Seite nichts mehr anfangen. Und gerade in Firmen ist das sogar relativ häufig der Fall.
Ergo solltet ihr immer einen Fallback haben, der diesen Fall abdeckt. Das nur mal als Empfehlung.

Dein Wunsch ist aber möglich.
Die Actions können auch Json und Co zurück geben; auf welcher Area oder Controller-Ebene ist hierbei völlig egal

Wenn euch Areas und dessen Bedeutung nichts sagt: ganz schnell das komplette Prinzip von ASP.NET MVC noch mal von Beginn verinnerlichen.
Areas sind vor allem wegen der sehr einfachen Erweiterbarkeit und sauberen Modularisierung vorhanden (Stichwort Portable Areas, Dependency Injection).

Ich habe zB keinen einzigen Controller, der NICHT in einer Area ist 😉
Selbst meine Startseite ist ein Area-Modul.

Wo die Views (aspx/Razor-Dateien) liegen ist völlig egal.
Arbeite mit relativen, vollständigen Pfaden und lass die Engine nicht suchen - das kostet nur Performance.

Erstell 2-3 Test-Projekte, um Dich an die Umgebung zu gewöhnen.
Schau Dir MVC Nerd Dinner und MVC MusicStore an; das sind Tutorials die bei weitem nicht perfekt, aber für den Anfang ganz gut sind.
Wenns ein größeres Projekt werden soll: lieber 1-2 Monate mehr in die Planung investieren, und dafür am Ende 6 Monate einsparen!
Euch werden zig Hindernisse in den Weg kommen, die ihr am Anfang niemals bedenken werdet, wenn ihr neu bei dem Thema sein (Sessioning, Multi-Tasking, LifeCycle, Performance....).

In meinem Blog hab ich ein paar Themen über ASP.NET MVC geschrieben; kann man sich anschauen, muss man nicht.

P
48 Beiträge seit 2005
vor 10 Jahren

Die Views befinden sich nicht unbedingt alle direkt im Views-Folder.
In der Grundeinstellung hat doch jeder Controller einen Unterordner im Views-Ordner. Außerdem gibt es dann noch den Shared-Ordner für gemeinsam genutzte Views.

--
mfG.
Marcel Eckhoff

16.842 Beiträge seit 2008
vor 10 Jahren

... und davon ist abzuraten, da jeder Suche nach dem reinen Namen im schlechtesten Fall 8 Anfragen aufs Dateisystem erfordert und damit uuuunfassbar langsam sein kann.
Statt 2000 Requests / Sekunde kann man dann evtl. nur noch 900 ausliefern (nur als Beispiel).

2.207 Beiträge seit 2011
vor 10 Jahren

Nebenbei soll die Webapplikation mit purem Ajax funktionieren.
Sprich die Seite soll niemals neugeladen werden.

Wenn du so etwas suchst, bist du bei Singe-Page-Applications (SPA) und sehr viel bei Javascript. Eine tolle Sache, bis man Javascript deaktiviert (wie Abt richtig gesagt hat).

Stichworte hierbei sind REST, WebAPI (bist du sicher drüber gestolpert, wenn du ASP.NET MVC angeschaut hast) und Sachen wie Knockout.js, etc.

Gruss

Coffeebean

R
Regenwurm Themenstarter:in
295 Beiträge seit 2008
vor 10 Jahren

Hallo zusammen,

Danke für die schnellen Antworten.
Das mit dem Deaktivieren des Javascripts ist natürlich so eine Sache.
Damit werden wir uns sicherlich auch noch befassen.
Der Hinweis auf Knockout.JS ist super, das schauen wir uns ebenfalls noch an.

Zu den Areas, das Ganze sieht sehr interessant aus.
So wie ich das verstanden habe, ist es eine gute 'Methode' jegliche Module in eine eigene Area zu verpacken.

Angenommen ich erstelle eine Area Verwaltung.
Dort drin müsste man Mitarbeiter, Gruppen sowie News verwalten können.
Wäre es eine gute Lösung im View Ordner in der Area dann für jede 'Verwaltungsmöglichkeit' einen Unterordner zu erstellen?

Sprich

Verwaltung
   -- /Views/
      -- /Mitarbeiter/
         -- NeuerMitarbeiter.aspx
         -- MitarbeiterEditieren.aspx
     -- /Gruppen/
         -- NeueGruppe.aspx
         -- GruppenZusammenfuegen.aspx
     -- /News/
        -- NewsErfassen.aspx
  -- /Models/
  -- /Controller

Im Controller gebe ich dann für die Views jeweils - wie von dir Abt empfohlen - den Relativen Pfad zu den Views zurück.

return View("Gruppen/NeueGruppe.aspx");

Beste Grüsse,
Regenwurm

ServiceStack & Angular = =)

16.842 Beiträge seit 2008
vor 10 Jahren

Schau Dir auch knockoutMVC statt knockout.js plain an - quasi der Wrapper drum rum; das erleichtert nochmal sehr viel mehr.

Prinzipiell ist Dein Vorgehen Okay,
Ich würde aber eher für Mitarbeiter, Gruppen und News eigenes Areas machen - einfach aufgrund der Modularität.
Dann hast Du auch kein "MitarbeiterErstellenController", "NewsErstellenController", "GruppeErstellenController" in Verwalten, sondern nur noch "ErstellenController" überall.
Erleichtert auch das Copy-Paste-Verhalten.

R
Regenwurm Themenstarter:in
295 Beiträge seit 2008
vor 10 Jahren

Hey,

Habe ich nicht pro View-Unterordner ein Controller?

Sprich, GruppenController, MitarbeiterController, NewsController?

ServiceStack & Angular = =)

16.842 Beiträge seit 2008
vor 10 Jahren

Hast Du Dir die MVC Beispiele angeschaut? Dann würde man es nämlich sehen 😉

Prinzipiell kannst Du Controller so viele anlegen wie Du willst.
In einem MitarbeiterController der VerwaltungArea stecken quasi dann alle Actions für diesen Mitarbeiter; in einem EditController in einer MitarbeiterArea nur die Actions für das Bearbeiten.

Zusätzlich macht das ganze einen Unterschied bei der zukünftigen URL.
Mit dem Eingebauten Routing-Verhalten heisst es:
/<AreaName>/<Controller>/<Action>
mit "besseren" RoutingSystemen wie AttributeRouting in MVC 5 oder meiner Route-Bibliothek MVCRouteCache wäre man da aber wieder flexibler.

Die Views sind egal; die können irgendwo liegen. Wichtig ist nur, wo die Controller sind.
Du kannst auch 100 Controller haben und nur einen Views-Order; oder gar keinen.

R
Regenwurm Themenstarter:in
295 Beiträge seit 2008
vor 10 Jahren

Okay alles klar, danke für eure Hilfe!

Gruess,
Regenwurm

ServiceStack & Angular = =)