Was ist der "Seitenlebenszyklus" einer ASP.NET MVC-Seite im Vergleich zu ASP.NET WebForms?

158

Was ist der "Seitenlebenszyklus" einer ASP.NET MVC-Seite im Vergleich zu ASP.NET WebForms?

Ich versuche, diese "einfache" Frage besser zu verstehen, um festzustellen, ob vorhandene Seiten, die ich auf einer (sehr) einfachen Site habe, problemlos aus ASP.NET WebForms konvertiert werden können.

Entweder eine "Konvertierung" des folgenden Prozesses oder ein alternativer Lebenszyklus wäre das, wonach ich suche.

Was ich gerade mache:

(Ja, ich weiß, dass jeder, der in der Lage ist, meine Frage zu beantworten, dies alles bereits weiß. Ich versuche nur, einen Vergleich des 'Lebenszyklus' zu erhalten, also dachte ich, ich würde damit beginnen, das auszufüllen, was wir alle bereits wissen.)

Rendern der Seite:

  • Ich habe eine Masterseite, die meine Grundvorlage enthält
  • Ich habe Inhaltsseiten, die mir benannte Bereiche von der Masterseite geben, in die ich Inhalte eingefügt habe.
  • In einem Event-Handler für jede Inhaltsseite lade ich Daten aus der Datenbank (meistens schreibgeschützt).
  • Ich binde diese Daten an ASP.NET-Steuerelemente, die Raster, Dropdowns oder Repeater darstellen. Diese Daten "leben" alle im generierten HTML. Einiges davon gelangt in ViewState (aber ich werde nicht zu viel darauf eingehen!)
  • Ich lege Eigenschaften fest oder binde Daten an bestimmte Elemente wie Bild- oder TextBox-Steuerelemente auf der Seite.
  • Die Seite wird an den Client gesendet und als nicht wiederverwendbares HTML gerendert.
  • Ich versuche zu vermeiden, ViewState zu verwenden, außer dem, was die Seite mindestens benötigt.

Client-Seite (ohne ASP.NET AJAX):

  • Ich kann JQuery und einige böse Tricks verwenden, um Steuerelemente auf der Seite zu finden und Operationen an ihnen auszuführen.
  • Wenn der Benutzer aus einem Dropdown-Menü auswählt, wird ein Postback generiert, das ein C # -Ereignis in meinem Codebehind auslöst. Dieses Ereignis wird möglicherweise in die Datenbank übertragen, aber was auch immer es tut, eine vollständig neu generierte HTML-Seite wird an den Client zurückgesendet.
  • Ich kann Page.Session verwenden, um Schlüsselwertpaare zu speichern, die ich später wiederverwenden muss

Wie ändert sich dieser „Lebenszyklus“ bei MVC?

Simon_Weaver
quelle
2
Einige Verweise aus meinen Lesezeichen, die die Funktionsweise der Anforderungspipeline in einer ASP.NET-MVC hervorheben. Dies ist normalerweise hilfreich, 1. um ASP.NET MVC selbst zu verstehen, 2. um die verschiedenen von MVC bereitgestellten Injektionspunkte zu verstehen und um sie zu verstehen. https://docs.google.com/open?id=0B0_EIyBZvSQsOTU3N2Q2NDEtMWNjMS00ZTc0LWJmMjUtM2I0M2I5NDY2ZDNl [ simple-talk.com/content/article.aspx?article=1358](https://...
humblelistener
Der Seitenzyklus
Insan

Antworten:

39

Ich werde versuchen, jeden der von Ihnen erwähnten Aufzählungspunkte zu kommentieren:

Ihre Masterseiten sind noch in MVC vorhanden und werden verwendet, um der Site ein konsistentes Layout zu verleihen. dort nicht viel neues.

Ihre Inhaltsseiten werden zu Ansichten in der MVC-Welt. Sie bieten Ihren Masterseiten weiterhin dieselben Inhaltsbereiche.

Die Ereignisbehandlung von Webformularen sollte nicht in MVC verwendet werden. Stattdessen übernehmen Ihre Controller-Klassen und ihre Aktionsmethoden das Laden Ihrer Daten in ein "Modell", das an die Ansicht übergeben wird.

Obwohl in MVC eine Datenbindung im Webform-Stil möglich ist, finde ich, dass dies nicht die optimale Lösung ist. Platzieren Sie Ihre Daten besser in einer Modellklasse und geben Sie Ihre Ansicht stark ein, damit Sie direkten Zugriff auf dieses Modell haben. Dann müssen Sie lediglich die <%= ViewData.Model.SomeProperty %>Syntax verwenden, um auf Ihre Daten zuzugreifen und sie an den gewünschten Stellen anzuzeigen. Was Viewstate betrifft, empfehle ich zu vergessen, dass es überhaupt existiert.

Denken Sie daran, dass einer der Vorteile der Verwendung von MVC darin besteht, dass Sie die Kontrolle über den HTML-Code haben, den Sie an den Client senden. Nutzen Sie diese Kraft und versuchen Sie, Lösungen zu finden, mit denen Sie diese Kontrolle behalten können. Webform-Steuerelemente versuchen, das HTML vor Ihnen zu verbergen, und erschweren es daher, das HTML bei Bedarf anzupassen.

Ich kann JQuery oder eine der anderen ähnlich leistungsfähigen Javascript-Bibliotheken nur empfehlen. Lernen Sie jedoch, mit ihnen direkt auf das HTML-DOM zuzugreifen und die Probleme mit der ID-Verwaltung von Webform-Steuerelementen zu vermeiden.

Mit jquery können Sie sich auf der Clientseite in die Dropdown-Auswahl einbinden und Standard- oder Ajax-Anforderungen senden. Diese Anforderungen können neue Seiten, Weiterleitungen, HTML-Fragmente oder sogar JSON-Daten zurückgeben, die zum Aktualisieren der vorhandenen Seite verwendet werden können.

Die asp.net-Sitzung kann nach Bedarf verwendet werden.

Mike Glenn
quelle
Vielen Dank für Ihre ausführliche Antwort. Es war tatsächlich JQuery, der mich dazu brachte, zu MVC zurückzukehren. Ich hatte es mir kurz angesehen und es abgewiesen (zumindest vorerst). Mit JQuery zu spielen und zu versuchen, nur Dinge im DOM zu finden, war zu schmerzhaft, also dachte ich, ich würde versuchen, zu MVC zurückzukehren und mehr zu erfahren
Simon_Weaver
MVC-Seiten haben eine ModelEigenschaft, um auf das Modell zuzugreifen. Sie müssen das nicht durchgehen ViewData.
Tsahi Asher