Was, warum oder wann ist es besser, cshtml vs aspx zu wählen?

108

Ich würde gerne wissen, was, warum oder wann es besser ist, cshtml zu wählen und was, warum oder wann es besser ist, Aspx-Technologien zu wählen? Wofür sind diese beiden Technologien gedacht?

Danke dir,

Bastien Vandamme
quelle
Ich glaube nicht, dass ich irgendwo auf der microsoft.com-Website cshtml-Dateien gesehen habe.
user34660
@ user34660 Wie bestimmen Sie, ob es sich um cshtml oder aspx handelt? Die Erweiterung ist verborgen.
Sajuuk

Antworten:

111

Wie andere Leute geantwortet haben .cshtml(oder .vbhtmlwenn das Ihr Geschmack ist), bietet es eine Handler-Zuordnung zum Laden der MVC-Engine. Die .aspxErweiterung lädt einfach die aspnet_isapi.dll, die die Kompilierung durchführt und Webformulare bereitstellt. Der Unterschied in der Handlerzuordnung besteht lediglich darin, dass beide auf demselben Server nebeneinander existieren können, sodass sowohl MVC-Anwendungen als auch WebForms-Anwendungen unter einem gemeinsamen Stammverzeichnis ausgeführt werden können.

Dadurch kann http://www.mydomain.com/MyMVCApplication gültig sein und mit MVC-Regeln zusammen mit http://www.mydomain.com/MyWebFormsApplication als Standard-Webformular gültig sein.

Bearbeiten:
Was den Unterschied in den Technologien betrifft, soll das MVC (Razor) -Vorlagen-Framework .Net-Seiten an eine RESTful "webbasierte" Plattform von Vorlagenansichten zurückgeben, die die Codelogik zwischen dem Modell (Geschäfts- / Datenobjekte) trennt. , die Ansicht (was der Benutzer sieht) und die Controller (die Verbindung zwischen den beiden). Das WebForms-Modell (aspx) war ein Versuch von Microsoft, mithilfe einer komplexen Javascript-Einbettung eine statusbehaftete Anwendung zu simulieren, die einer WinForms-Anwendung mit Ereignissen und einem Seitenlebenszyklus ähnelt und in der Lage ist, ihren eigenen Status von Seite zu Seite beizubehalten.

Die Wahl des einen oder anderen wird immer umstritten sein, da es Argumente für und gegen beide Systeme gibt. Ich jedenfalls mag die Einfachheit in der MVC-Architektur (obwohl das Routing alles andere als einfach ist) und die Leichtigkeit der Razor-Syntax. Ich bin der Meinung, dass die WebForms-Architektur einfach zu schwer ist, um eine effektive Webplattform zu sein. Abgesehen davon gibt es viele Fälle, in denen das WebForms-Framework ein sehr prägnantes und verwendbares Modell mit einer reichhaltigen Ereignisstruktur bietet, die gut definiert ist. Alles läuft auf die Bedürfnisse der Anwendung und die Vorlieben derjenigen hinaus, die sie erstellen.

Joel Etherton
quelle
11
+1, Dies ist ein wichtiger Punkt bei der Unterscheidung zwischen dem Ziel von ASP.NET Web Form, eine zustandsbehaftete Umgebung für das zustandslose Web zu erstellen.
Smartcaveman
Ein wesentlicher Vorteil von aspx gegenüber cshtml besteht darin, dass Sie die Seite selbst (WUSIWYG-Art) über die Registerkarte Design anzeigen und bearbeiten können. Bei cshtml-Dateien können Sie auch den Editor zum Bearbeiten Ihrer HTML-Seite verwenden. Sie arbeiten "im Dunkeln".
nivs1978
@ nivs1978: Ich finde das eigentlich ein Nachteil. Zu viele Entwickler verwenden dies als Krücke, um schlampiges Markup zu schreiben. Am Ende kann der Designer Ihnen nur eine "fast" Version der Seite anzeigen, da die Ansicht nur mit einem eigenen internen "Browser" gerendert wird. Während Sie möglicherweise einen allgemeinen Eindruck davon bekommen, wie eine Seite angezeigt wird, können Sie es erst wissen, wenn sie in einem echten Browser gerendert wurde.
Joel Etherton
44

Razor ist eine Ansichts-Engine für ASP.NET MVC sowie eine Vorlagen-Engine . Razor-Code und ASP.NET-Inline-Code (Code gemischt mit Markup) werden zuerst kompiliert und vor der Ausführung in eine temporäre Assembly umgewandelt. Genau wie C # und VB.NET kompilieren beide zu IL, wodurch sie austauschbar sind, sind sowohl Razor- als auch Inline-Code austauschbar.

Daher ist es eher eine Frage des Stils und des Interesses. Ich bin eher mit Rasiermesser als mit ASP.NET-Inline-Code vertraut, dh ich bevorzuge Rasiermesserseiten (cshtml) gegenüber ASPX-Seiten.

Stellen Sie sich vor, Sie möchten eine HumanKlasse erhalten und rendern. In cshtml- Dateien schreiben Sie:

<div>Name is @Model.Name</div>

Während Sie in Aspx- Dateien schreiben, schreiben Sie:

<div>Name is <%= Human.Name %></div>

Wie Sie sehen können, @erleichtert das Zeichen des Rasiermessers das Mischen von Code und Markup erheblich.

Saeed Neamati
quelle
6
@ MikaëlMayer in Razor Modelwird für stark typisierte Ansichten verwendet, in denen Sie Ihren Typ oben mit einem modelSchlüsselwort definieren.
Saeed Neamati
Eine kleine Frage an Sie @SaeedNeamati ...... Angenommen, wir erstellen eine Webanwendung, um komplexe SOAP-WebAPI auf Basis von Mikrodiensten zu verwenden. In diesem Szenario ist asp.net mvc aspx oder mvc cshtml besser zu verwenden . Ich persönlich fühlte mich cshtml Syntax einfacher.
Codemilan
Schöne Antwort ... diese Antwort ist viel einfacher zu verstehen ..., zumindest für Anfänger wie mich :)
eRaisedToX
10

Während die Syntax zwischen Razor ( .cshtml/ .vbhtml) und WebForms ( .aspx/ .ascx) sicherlich unterschiedlich ist (Razor ist die prägnantere und modernere der beiden), hat niemand erwähnt, dass beide als View Engines / Templating Engines verwendet werden können, traditionelles ASP.NET Web Forms-Steuerelemente können für alle ASPX- oder ASCX-Dateien verwendet werden (auch in Verbindung mit einer MVC-Architektur).

Dies ist in Situationen relevant, in denen langjährige Lösungen für ein Problem erstellt und in eine steckbare Komponente (z. B. ein Steuerelement zum Hochladen großer Dateien) gepackt wurden und Sie diese in einer MVC-Site verwenden möchten. Mit Razor können Sie das nicht tun. Sie können jedoch dieselbe Backend-Verarbeitung ausführen, die Sie mit einer herkömmlichen ASP.NET-Architektur mit einer Web Form-Ansicht verwenden würden.

Darüber hinaus können ASP.NET-Webformularansichten Code-Behind-Dateien enthalten, mit denen Logik in eine separate Datei eingebettet werden kann, die zusammen mit der Ansicht kompiliert wird. Während die Softwareentwickler-Community wächst, um eng gekoppelte Architekturen und das Smart Client-Muster als schlechte Praxis zu betrachten , war dies früher die Hauptmethode und ist mit ASPX / ASCX-Dateien immer noch sehr gut möglich. Rasiermesser hat absichtlich keine solche Qualität.

Smartcaveman
quelle
Als ich anfing, das zu schreiben, hatte Joel seine Bearbeitung nicht vorgenommen, aber ich werde sie
belassen,
4

Cshtml-Dateien werden von Razor verwendet. Wie als Antwort auf diese Frage angegeben , besteht ihr Hauptvorteil darin, dass sie in Komponententests gerendert werden können. Die verschiedenen Antworten auf dieses andere Thema werden viele andere interessante Punkte bringen.

Timothée Bourguignon
quelle