Quoi, pourquoi ou quand il est préférable de choisir cshtml vs aspx?

108

J'aimerais savoir quoi, pourquoi ou quand il vaut mieux choisir cshtml et quoi, pourquoi ou quand il vaut mieux choisir les technologies aspx? À quoi servent ces deux technologies?

Merci,

Bastien Vandamme
la source
Je ne pense pas avoir vu de fichiers cshtml sur le site Web microsoft.com.
user34660 le
@ user34660 comment déterminez-vous s'il s'agit de cshtml ou aspx? l'extension est dissimulée.
Sajuuk

Réponses:

111

Comme d'autres personnes ont répondu, .cshtml(ou .vbhtmlsi c'est votre goût) fournit un mappage de gestionnaire pour charger le moteur MVC. L' .aspxextension charge simplement aspnet_isapi.dll qui effectue la compilation et sert les formulaires Web. La différence dans le mappage du gestionnaire est simplement une méthode permettant aux deux de coexister sur le même serveur, permettant aux applications MVC et aux applications WebForms de vivre sous une racine commune.

Cela permet à http://www.mydomain.com/MyMVCApplication d'être valide et de recevoir des règles MVC avec http://www.mydomain.com/MyWebFormsApplication d'être valide en tant que formulaire Web standard.

Edit:
En ce qui concerne la différence entre les technologies, le framework de modèles MVC (Razor) est destiné à renvoyer les pages .Net à une plate-forme "Web" plus RESTful de vues modèles séparant la logique de code entre le modèle (objets métier / données) , la vue (ce que voit l'utilisateur) et les contrôleurs (la connexion entre les deux). Le modèle WebForms (aspx) était une tentative de Microsoft d'utiliser l'incorporation de javascript complexe pour simuler une application plus avec état similaire à une application WinForms complète avec des événements et un cycle de vie de page qui serait capable de conserver son propre état d'une page à l'autre.

Le choix d'utiliser l'un ou l'autre sera toujours controversé car il y a des arguments pour et contre les deux systèmes. Pour ma part, j'aime la simplicité de l'architecture MVC (bien que le routage soit tout sauf simple) et la facilité de la syntaxe Razor. Je pense que l'architecture WebForms est trop lourde pour être une plate-forme Web efficace. Cela étant dit, il existe de nombreux cas où le framework WebForms fournit un modèle très succinct et utilisable avec une structure d'événements riche et bien définie. Tout se résume aux besoins de l'application et aux préférences de ceux qui la construisent.

Joël Etherton
la source
11
+1, C'est un point important sur la distinction entre l'objectif de ASP.NET Web Form de créer un environnement avec état pour le Web sans état.
smartcaveman
Un avantage majeur d'aspx par rapport à cshtml est que vous pouvez afficher et modifier la page elle-même (type WUSIWYG) en utilisant l'onglet de conception. Avec les fichiers cshtml, vous pouvez également utiliser le bloc-notes pour éditer votre page html. Vous travaillez "dans le noir".
nivs1978
@ nivs1978: Je trouve en fait que c'est un inconvénient. Trop de développeurs l'utilisent comme une béquille pour écrire un balisage bâclé. Au final, le concepteur n'est capable de vous montrer qu'une version "presque" de la page car il ne restituera la vue qu'avec son propre "navigateur" interne. Bien que vous puissiez avoir une idée générale de la façon dont une page s'affichera, vous ne pouvez toujours pas le savoir tant qu'elle n'est pas rendue dans un véritable navigateur.
Joel Etherton
44

Razor est un moteur de vue pour ASP.NET MVC et également un moteur de modèle . Le code Razor et le code en ligne ASP.NET (code mélangé à du balisage) sont tous deux compilés en premier et transformés en assembly temporaire avant d'être exécutés. Ainsi, tout comme C # et VB.NET compilent tous deux en IL, ce qui les rend interchangeables, le code Razor et Inline sont tous deux interchangeables.

C'est donc plus une question de style et d'intérêt. Je suis plus à l'aise avec le rasoir que le code en ligne ASP.NET, c'est-à-dire que je préfère les pages Razor (cshtml) aux pages .aspx.

Imaginez que vous vouliez obtenir une Humanclasse et la restituer. Dans les fichiers cshtml , vous écrivez:

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

Lorsque vous écrivez dans des fichiers aspx :

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

Comme vous pouvez le voir, le @signe du rasoir facilite le mélange du code et du balisage.

Saeed Neamati
la source
6
@ MikaëlMayer, dans Razor, Modelest utilisé pour les vues fortement typées, dans lesquelles vous définissez votre type en haut à l'aide de modelmot-clé.
Saeed Neamati le
Une petite question pour vous @SaeedNeamati ...... Disons que nous construisons une application Web pour consommer des micro-services complexes SOAP webAPI .... dans ce scénario, est asp.net mvc aspx ou mvc cshtml est préférable d'utiliser . Personnellement, j'ai senti la syntaxe cshtml plus facile.
codemilan
Bonne réponse ... cette réponse est beaucoup plus simple à comprendre ..., du moins pour les débutants comme moi :)
eRaisedToX
10

Bien que la syntaxe soit certainement différente entre Razor ( .cshtml/ .vbhtml) et WebForms ( .aspx/ .ascx), (Razor étant le plus concis et le plus moderne des deux), personne n'a mentionné que si les deux peuvent être utilisés comme moteurs de visualisation / moteurs de modèles, ASP.NET traditionnel Les contrôles Web Forms peuvent être utilisés sur tous les fichiers .aspx ou .ascx (même en cohésion avec une architecture MVC).

Ceci est pertinent dans les situations où des solutions de longue date à un problème ont été établies et conditionnées dans un composant enfichable (par exemple, un contrôle de téléchargement de gros fichiers) et que vous souhaitez l'utiliser dans un site MVC. Avec Razor, vous ne pouvez pas faire ça. Cependant, vous pouvez exécuter tous les mêmes traitements de backend que vous utiliseriez avec une architecture ASP.NET traditionnelle avec un affichage de formulaire Web.

En outre, les vues de formulaires Web ASP.NET peuvent avoir des fichiers Code-Behind, ce qui permet d'incorporer la logique dans un fichier distinct qui est compilé avec la vue. Alors que la communauté de développement de logiciels est de plus en plus considérée comme une mauvaise pratique des architectures étroitement couplées et du modèle Smart Client , c'était auparavant le principal moyen de faire les choses et c'est toujours très possible avec les fichiers .aspx / .ascx. Razor, intentionnellement, n'a pas une telle qualité.

smartcaveman
la source
Quand j'ai commencé à écrire cela, Joel n'avait pas fait son montage, mais je le laisserai au cas où quelqu'un le trouverait utile
smartcaveman
4

Les fichiers Cshtml sont ceux utilisés par Razor et comme indiqué comme réponse à cette question , leur principal avantage est qu'ils peuvent être rendus dans des tests unitaires. Les différentes réponses à cet autre sujet apporteront beaucoup d'autres points intéressants.

Timothée Bourguignon
la source