Laden...

MVC automatisch zwei Views rendern

Erstellt von Curse4Life vor 12 Jahren Letzter Beitrag vor 12 Jahren 1.529 Views
C
Curse4Life Themenstarter:in
452 Beiträge seit 2005
vor 12 Jahren
MVC automatisch zwei Views rendern

Hi,

ich habe eine Frage, ich schreibe gerade an einer eigenen MVC ViewEngine und ich würde gerne ein Feature einbauen, bei dem mir noch der richtige Ansatz fehlt und da wollte ich mal in die Runde fragen.

Was ich machen möchte ist, wenn ich z.B. Site/Index aufrufe, was ja die View "/Views/Site/Index.cshtml" lädt, das automatisch unter dem geladenen Content der View, der Inhalt der View "/Views/Site/Index.js.cshtml" geladen wird.

Das möchte ich machen, weil ich einfach an meinen Projekten merke, mit Ajax und dem ganzen schönen Web 2.0 Sachen, ist der JavaScript Code Anteil, enorm und ich möchte ihn gerne auslagern um meine Views ein wenig schlanker zu halten!

Mehrere Sachen würde ich dabei gerne beachten:

  • Der automatisch geladenen View, soll das Model der "manuell" geladenen View übergeben werden, so sie denn eins hat.
  • Es soll, tatsächlich auf View Ebene passieren, nicht auf Action Ebene.
  • Ich möchte gerne weiterhin, einfach "return View()" benutzen.

Liebe Grüße

16.842 Beiträge seit 2008
vor 12 Jahren

Hi,

tut mir leid, aber ich muss Dich hier "massiv" kritisieren; und kann Dich in Deinem Problem nicht unterstützen.
Javascript gehört zu den Ressourcen, die nicht dynamisch geändert werden. Das ist auch so im RFC definiert. Javascript wird vom Client gecached - und das mit Grund!

Daher würde Deine ViewEngine, die jedes mal bei jedem Request ein Javascript gerendert mitschickt, keine guten Noten in Sachen Performance bekommen.
Ein absolutes NoGo für mobile Seiten und moderne Webapplikationen!

Für Dein Problem lege ich Dir eher OOP in Javascript ans Herz. Ähnliches Prinzip wie jQuery.
Du erstellst pro View eine eigene js-Klasse und hast eine eigene Section, die der Layout-Seite (Master) den Pfad zur statischen Javascript-Datei dieser View übergibt.
In dieser js-Datei sind alle Funktionen für diese eine View. Das js-File wird bei Bedarf geladen UND vom Client gecached!

Ein ähnliches Prinzip ist in den MVC Projekt-Templates mit der Client-seitigen Validierung umgesetzt.

Gruß vom Abt

C
Curse4Life Themenstarter:in
452 Beiträge seit 2005
vor 12 Jahren

Also, ich weiß ja nicht wie umfangreich deine Web 2.0 Projekte mit jQuery bisher so waren, aber ich habe schon zig mal im JavaScript mit C# zur Hilfe genommen, sei es um Model Werte einem jQuery.post als Parameter zu übergeben, Code je nach ViewBag Wert auszuführen, oder oder oder.

Und, eine kleine JavaScript View mit 50-100 Zeilen zu rendern, dauert wieviel Millisekunden?

Also in Zeiten, wo Bilder und Videos mit mehreren MB genutzt werden als gäbe es kein morgen, halte ich das jetzt für ein wenig übertrieben, ich will ja keinen neuen HTTP Request dafür machen, sondern lokal die View von der Platte dazu rendern.

Aber gut, jedem seine Meinung

16.842 Beiträge seit 2008
vor 12 Jahren

Hallo,

auch wenn ich eine Diskussion vermeiden möchte:
Man trennt seine View von seinem Javascript Code. Das macht man bei WPF nicht anders: hier wird auch Code und GUI getrennt - und Javascript gehört auch bei HTML zur Code-Ebene.

Meine Webanwendungen sind nicht klein. Teilweise sprechen wir von mehreren tausend Aktionen+Zugriffe pro Sekunde.
Irgendwann wirst Du an den Punkt kommen, dass Du Dich ärgerst, dass Du Javascript in Deine View packst - wo sie einfach nicht hingehört. VOR ALLEM in Web 2.0 Anwendungen, bei der man jede Javascript-Funktion spüren KANN (Ajax, Effekte..), sollte man nicht so eine Architektur wählen, dass der IE5 mit versorgt wird. Da hilft auch eine Meinung nicht.

Ich lege Dir wirklich mal ein HTML5 Whitepaper ans Herz. Da wird sowas behandelt.
Stichwort: asynchrones Laden von Javascript.

Gruß