Frage Asp.net MVC - Kann ich eine Ansicht von einem anderen Ansichtsordner laden?


In meiner App muss ich dieselbe Ansicht von zwei verschiedenen Controllern laden, ohne die Ansicht in das Verzeichnis der gemeinsamen Ansichten zu stellen.

Grundsätzlich habe ich diese Ordnerstruktur

  • Controller
    • EreignisseController.cs
    • SearchController.cs
  • Ansichten
    • Veranstaltungen
      • Vorschau.aspx
    • Suche

Im Grunde genommen ist es ähnlich wie hier beim Stack-Überlauf. Sie erhalten eine Vorschau auf eine Reihe von Fragen unter dem Link Fragen, aber Sie erhalten auch eine identisch formatierte Seite, wenn Sie eine Suche in der Suchleiste durchführen. Die Ansichten und Ansichtsmodelle sind vermutlich identisch.

Da die Ansicht, die ich für die Suche benötige, genau der Ansicht entspricht, die ich für Ereignisse benötige, möchte ich dieselbe Ansicht wiederverwenden. Ich möchte jedoch vermeiden, das freigegebene Verzeichnis für diese bestimmte Ansicht zu verwenden.

Also meine zweiteilige Frage ist ---

  1. Ist das möglich und wenn ja wie?
  2. Ist das eine schlechte Übung?

20
2017-12-29 04:09


Ursprung


Antworten:


Ja, du kannst. Einfach return View("~/Views/Events/Preview.aspx").

Ich würde jedoch aus mehreren Gründen davon abraten. Das größte Problem ist, dass dies für jeden, der den Code später (vielleicht sogar Sie) ändern möchte, nicht offensichtlich ist und zu möglichen Fehlern führen kann.

Ein besserer Ansatz könnte darin bestehen, eine "Gemeinsame" Ansicht oder eine gemeinsame Teilansicht zu erstellen. Meine Präferenz wäre eine geteilte Teilansicht, dann in der nicht freigegebenen Ansicht die gewünschte Teilansichtsfunktion.


33
2017-12-29 04:19



  1. Es ist möglich.
  2. Ich bin mir nicht sicher, ob Sie stark typisierte Ansichten verwenden. Aber angenommen, es ist etwas merkwürdig für mich, dass Sie Event-Suche und Suche mit demselben View-Modell haben. Möglicherweise trennen sie sie mit zwei verschiedenen Ansichtsmodellen und Ansicht wäre besser IMHO. Außerdem, wenn Sie den Namen der Ansicht angeben, die in den Controller geladen werden soll, wird es irgendwie als Kopplungsansicht und Controller betrachtet und es ist sicherlich keine gute Idee.

1
2017-12-29 04:14