Frage

Ich bin verwirrt darüber, wie Ansichten organisiert sind, und es ist wichtig, dies zu verstehen, da ASP.NET MVC Konventionen verwendet, damit alles richtig funktioniert.

Unter dem Verzeichnis „views“ gibt es Unterverzeichnisse.In diesen Unterverzeichnissen befinden sich Ansichten.Ich gehe davon aus, dass die Unterverzeichnisse Controllern zugeordnet sind und die Controller auf die in ihren Unterverzeichnissen enthaltenen Ansichten reagieren.

Gibt es eine aufkommende Erwartung, welche Arten von Ansichten in diesen Verzeichnissen enthalten sind?Sollte die Standardseite für jedes Verzeichnis beispielsweise index.aspx sein?Sollten die Seiten einer Namenskonvention wie Create[controller].aspx, List[controller].aspx usw. folgen?Oder ist es egal?

War es hilfreich?

Lösung

Die Benennung von Ansichtsverzeichnissen und Dateien ist wichtig, da das ASP.NET MVC-Framework diesbezüglich bestimmte Annahmen trifft.Wenn Sie diese Annahmen nicht erfüllen, müssen Sie Code schreiben, um dem Framework mitzuteilen, was Sie tun.Im Allgemeinen sollten Sie sich an diese Annahmen halten, es sei denn, Sie haben einen guten Grund, dies nicht zu tun.

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

    public ActionResult NotAuthorized()
    {
        return View();
    }

Da im Aufruf von View() kein Ansichtsname angegeben wurde, geht das Framework davon aus, dass der Ansichtsdateiname mit dem Aktionsnamen übereinstimmt.Das Framework verfügt über einen Typ namens ViewEngine, der die Erweiterung bereitstellt.Die Standard-ViewEngine ist WebFormViewEngine, die diesen Namen annimmt und eine ASPX-Datei daran anhängt.Der vollständige Dateiname wäre in diesem Fall also NotAuthorized.aspx.

Aber in welchem ​​Ordner befindet sich die Datei?Auch hier stellt die ViewEngine diese Informationen bereit.Mit WebFormViewEngine wird es in zwei Ordnern gesucht:~/Views/Shared und ~/Views/{controller}

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

Es kann jedoch vorkommen, dass Sie diese Regeln nicht befolgen möchten.Beispielsweise könnten zwei unterschiedliche Aktionen dieselbe Ansicht zurückgeben (mit einem anderen Modell oder so).Wenn Sie in diesem Fall den Ansichtsnamen explizit in Ihrer Aktion angeben:

    public ActionResult NotAuthorized()
    {
        return View("Foo");
    }

Beachten Sie, dass bei WebFormViewEngine der „Ansichtsname“ im Allgemeinen mit dem Dateinamen abzüglich der Erweiterung übereinstimmt, das Framework jedoch nicht den Namen anderer Ansichts-Engines erfordert.

Ebenso kann es sinnvoll sein, dass Ihre Anwendung nach Ansichten und nicht standardmäßigen Ordnern sucht.Sie können dies tun, indem Sie Ihre eigene ViewEngine erstellen.Ich zeige die Technik in dieser Blogbeitrag, aber die Typnamen sind unterschiedlich, da es für eine frühere Version des Frameworks geschrieben wurde.Die Grundidee ist jedoch immer noch dieselbe.

Andere Tipps

Im Hinblick auf die erwarteten Namen für die Ansichten, denke ich, dass es eines dieser Dinge, die jedes Projekt oder eine Organisation wird versuchen, zu standardisieren.

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

  • / Bestellungen / (d-Index)
  • / Bestellungen / show / 123
  • / Bestellungen / edit / 123
  • / Bestellungen / update / 123
  • / Bestellungen / new
  • / Bestellungen / create
  • / Bestellungen / vernichten / 123

Die Wahl / Standardisierung der Ansichten ist weitgehend davon abhängig, wie Sie Ihre Anwendung modellieren (zu sagen, das Offensichtliche) und wie feinkörnig Sie gehen möchten. Je näher Sie Karte Ihre Controller auf einzelne Modellklassen (Husten ... resources ... Husten), desto kürzer Ihre Aktionen sind in der Regel werden Sie leichter sein und in der Lage, einen Standardsatz von Aktionen zu folgen (wie im obigen Beispiel ).

Ich glaube auch, dass kürzere Aktionen mehr und mehr die Modell Business-Logik in die Modelle selbst helfen schieben, wo es hingehört.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top