Wie sollte die Datei- / Verzeichnisstruktur in ASP.NET MVC aussehen?

8

Ich bin verwirrt, wie Ansichten organisiert sind, und es ist wichtig, dies zu verstehen, da ASP.NET MVC Konventionen verwendet, um alles richtig zu machen.

Unter dem Verzeichnis views gibt es Unterverzeichnisse. In diesen Unterverzeichnissen befinden sich Ansichten. Ich gehe davon aus, dass die Unterverzeichnisse den Controllern zugeordnet sind und die Controller auf die Ansichten innerhalb ihrer Unterverzeichnisse reagieren.

Besteht die Erwartung, welche Art von Ansichten in diesen Verzeichnissen enthalten sind? Zum Beispiel, sollte die Standardseite für jedes Verzeichnis index.aspx sein? Sollten die Seiten einer Namenskonvention folgen, wie zum Beispiel Create [controller] .aspx, List [controller] .aspx usw.? Oder spielt es keine Rolle?

    
Will 24.09.2008, 15:30
quelle

2 Antworten

7

Die Verzeichnisbenennung und Dateibenennung sind wichtig, da das ASP.NET MVC-Framework bestimmte Annahmen über sie trifft. Wenn Sie diesen Annahmen nicht entsprechen, müssen Sie Code schreiben, damit das Framework weiß, was Sie tun. Im Allgemeinen sollten Sie diesen Annahmen folgen, es sei denn, Sie haben einen guten Grund, dies nicht zu tun.

Sehen wir uns die einfachste mögliche Controller-Aktion an:

%Vor%

Da im Aufruf von View () kein View-Name angegeben wurde, wird davon ausgegangen, dass der View-Dateiname dem Action-Namen entspricht. Das Framework hat einen Typ namens ViewEngine, der die Erweiterung liefert. Die Standard-ViewEngine ist WebFormViewEngine, die diesen Namen annimmt und ihr einen ASPX anfügt. Also wäre der vollständige Dateiname in diesem Fall NotAuthorized.aspx.

Aber in welchem ​​Ordner wird die Datei gefunden? Auch hier liefert die ViewEngine diese Informationen. Mit WebFormViewEngine wird es in zwei Ordnern aussehen: ~ / Views / Shared und ~ / Views / {Controller}

Wenn Ihr Controller also AccountController heißt, würde er in ~ / Views / Account

aussehen

Aber es könnte Zeiten geben, in denen Sie diesen Regeln nicht folgen wollen. Zum Beispiel können zwei verschiedene Aktionen dieselbe Ansicht (mit einem anderen Modell oder etwas) zurückgeben. In diesem Fall, wenn Sie den View-Namen explizit in Ihrer Aktion angeben:

%Vor%

Beachten Sie, dass mit "WebFormViewEngine" der "Ansichtsname" im Allgemeinen derselbe ist wie der Dateiname, ohne die Erweiterung, aber das Framework erfordert nicht die anderen View Engines.

Sie haben möglicherweise auch einen Grund, dass Ihre Anwendung nach Sichten und nicht standardmäßigen Ordnern suchen soll. Sie können dies tun, indem Sie Ihre eigene ViewEngine erstellen. Ich zeige die Technik in diesem Blogbeitrag , aber die Typnamen sind unterschiedlich, da sie für eine frühere Version des Frameworks geschrieben wurden. Die Grundidee ist jedoch immer noch dieselbe.

    
Craig Stuntz 24.09.2008, 16:00
quelle
2

Im Hinblick auf die erwarteten Namen für die Ansichten denke ich, dass dies eines der Dinge ist, die jedes Projekt oder jede Organisation zu standardisieren versuchen wird.

Wie Sie in Ihrer Frage angedeutet haben, ist es möglich, dass einige dieser Ansichten (oder genauer gesagt die Aktionen, die sie rendern) auf der ganzen Linie populär werden, wie zum Beispiel diejenigen, die in RoR-Anwendungen üblich sind REST-Paradigma:

  • / orders / (d. h. Index)
  • / orders / show / 123
  • / orders / edit / 123
  • / orders / update / 123
  • / orders / new
  • / orders / create
  • / orders / destroy / 123

Die Auswahl / Standardisierung der Ansichten hängt weitgehend davon ab, wie Sie Ihre Anwendung modellieren (um das Offensichtliche zu sagen) und wie feingranuliert Sie sein möchten. Je näher Sie Ihre Controller den einzelnen Modellklassen zuordnen (Husten ... Ressourcen ... Husten), desto kürzer werden Ihre Aktionen sein und desto einfacher werden Sie in der Lage sein, einem Standardsatz von Aktionen zu folgen (wie im obigen Beispiel) ).

Ich glaube auch, dass kürzere Aktionen helfen, mehr und mehr von der Modellgeschäftslogik in die Modelle selbst zu drängen, wo sie hingehören.

    
sergiopereira 24.09.2008 18:39
quelle